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 に答える
0

Array.IndexOf1 次元配列で使用できます。このコードでは、それを使用する必要はありません。randcを要素の位置として使用するだけです。

于 2013-10-04T18:02:36.330 に答える
0

Array.IndexOf()あなたが思っていることを実際にはしません。3 番目のパラメーターから始めて、2 番目のパラメーターに一致する最初の値を見つけるために、最初のパラメーターをスキャンします。

于 2013-10-04T18:02:48.643 に答える
0

したがって、問題が何であるかについて少し混乱するかもしれませんが、私が理解していることから、 と の値を単に出力したいだけ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());

                }
于 2013-10-04T18:01:23.027 に答える