2

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

5 回答 5

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);
于 2013-10-04T18:00:59.210 回答
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());
于 2013-10-04T18:01:48.970 回答
0

因此,我可能对问题所在感到有些困惑,但据我了解,您只是想打印rand的值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());

                }
于 2013-10-04T18:01:23.027 回答
0

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

于 2013-10-04T18:02:36.330 回答
0

Array.IndexOf()实际上并没有做你认为它做的事情。它从第三个参数开始扫描第一个参数以查找与第二个参数匹配的第一个值。

于 2013-10-04T18:02:48.643 回答