如何查找 2D 数组中元素的位置
本文关键字:数组 元素 位置 2D 何查找 查找 | 更新日期: 2023-09-27 18:33:53
在下面的代码中,我试图打印出0以下数字的位置。我可以很好地打印数字本身,但不知道如何打印出位置。
它编译得很好,但是当我运行它时,它会打印出第一个数字,然后崩溃。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Tutorial_3
{
class Q8FourByFiveArray
{
static void Main(string[] args)
{
int[,] numbers = new int[4, 5] { {1, -2, 6, -9, 8}, {-3, 4, -3, 6, 7}, {5, 6, -9, 0, -2}, {4, 5, -1, -7, 1}};
//search the array for numbers less than 0. Then print their positions
for (int r = 0; r < 4; r++)
{
for (int c = 0; c < 5; c++)
{
if (numbers[r, c] < 0)
{
Console.WriteLine(numbers.GetValue(r, c));
Console.WriteLine("Row: " + Array.IndexOf(numbers, r, c));
Console.WriteLine("Column: " + Array.IndexOf(numbers, c));
}
}
Console.WriteLine(" ");
}
}
}
}
你不需要Array.IndexOf
,你已经有行和列通过你的嵌套循环。使用它们。
int[,] numbers = new int[4, 5] { { 1, -2, 6, -9, 8 }, { -3, 4, -3, 6, 7 }, { 5, 6, -9, 0, -2 }, { 4, 5, -1, -7, 1 } };
//search the array for numbers less than 0. Then print their positions
for (int r = 0; r < 4; r++)
{
for (int c = 0; c < 5; c++)
{
if (numbers[r, c] < 0)
{
Console.Write(numbers.GetValue(r, c)); // better to use numbers[r,c]
Console.Write(" Row: " + r);
Console.WriteLine(" Column: " +c);
}
}
Console.WriteLine(" ");
}
或者只有一行输出:
Console.WriteLine("Number: {0}, Row: {1}, Column: {2}", numbers.GetValue(r, c), r, c);
更改以下内容:
Console.WriteLine("Row: " + Array.IndexOf(numbers, r, c));
Console.WriteLine("Column: " + Array.IndexOf(numbers, c));
对此:
Console.WriteLine("Row: " + r.ToString());
Console.WriteLine("Column: " + c.ToString());
所以我可能对问题是什么有点困惑,但据我所知,你只想打印r
和c
的值。相反,您正在IndexOf
东西来做这件事,这些东西实际上应该采用您正在搜索的值,返回它的索引,因此使用通常是不正确的。
基本上改变这一点;
if (numbers[r, c] < 0)
{
Console.WriteLine(numbers.GetValue(r, c));
Console.WriteLine("Row: " + Array.IndexOf(numbers, r, c));
Console.WriteLine("Column: " + Array.IndexOf(numbers, c));
}
对此;
if (numbers[r, c] < 0)
{
Console.WriteLine(numbers.GetValue(r, c));
Console.WriteLine("Row: " + r.ToString());
Console.WriteLine("Column: " + c.ToString());
}
Array.IndexOf
可以与一维数组一起使用。在此代码中,无需使用它。只需使用 r
和 c
作为元素的位置。
Array.IndexOf()
实际上并没有做你认为它做的事情。它扫描第一个参数以查找与第二个参数匹配的第一个值,从第三个参数开始。