如何在2D数组中找到元素的位置?

时间:2013-10-04 17:57:35

标签: c# multidimensional-array

在下面的代码中,我试图打印出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(" ");
            }
        }
    }
}

5 个答案:

答案 0 :(得分:2)

您不需要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);

答案 1 :(得分:1)

改变这个:

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());

答案 2 :(得分:0)

所以我可能会对问题是什么感到有些困惑,但据我所知,您只想打印rc的值。相反,你正在做这个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());

                }

答案 3 :(得分:0)

Array.IndexOf可用于一维数组。在此代码中,无需使用它。只需使用rc作为元素的位置。

答案 4 :(得分:0)

Array.IndexOf()实际上并没有按照您的想法行事。它会扫描第一个参数,以查找与第二个参数匹配的第一个值,从第三个参数开始。