2017-04-16 4 views
0

私は、Lengthプロパティを使用して2次元配列を検索しようとしています(そうでなければ、GetLength()を使用します)。この配列には、設定された数の行と列がランダムに設定されます。検索する番号をユーザに尋ねると、配列を検索して真または偽を返し、その番号が見つかると行と列のインデックスを返送します。Lengthプロパティを使用して2次元配列を検索する

forループを正しく設定するために行った調査のコードはかなり自信がありますが、現在、「[]内のインデックスの数が間違っています」というエラーが表示される私は配列の列を検索しようとします。

私はこのエラーを見てきましたが、これが適切な設定であることがわかりました。だから、私の問題がこのループでどこにあるのか分からない、誰かが私が行方不明を知っているかを見てみることができますか?

ありがとうございます!

int [,] math; 
math = new int[3, 5]; //So you can see my array that is declared in main 

static bool SearchArray(int search, int [,] array, out int row, out int coln) 
    { 
     row = -1; 
     coln = -1; 
     // search parameter is given from another method where it asks the user for a number to search for in the array. 

     for (int x = 0; x < array.Length; x++) 
     { 
      for (int y = 0; y < array[x].Length; y++) //error is here with the array[x] and continues to any reference I try to make similarly. 
      { 
       if (array[x][y] == search) 
       { 
        row = array[x]; 
        coln = array[y]; 
        return true; 
       } 
      } 
     } 
     return false 

答えて

0

ジグザグ配列を多次元、実際には2次元配列と混在させています。 2つの暗いのための解決策。配列はこのようなものになるだろう:

static bool SearchArray(int search, int [,] array, out int row, out int coln) 
{ 
    row = -1; 
    coln = -1; 
    for (int x = 0; x < array.GetLength(0); x++) 
    { 
     for (int y = 0; y < array.GetLength(1); y++) 
     { 
      if (array[x,y] == search) 
      { 
       row = x; 
       coln = y; 
       return true; 
      } 
     } 
    } 
    return false 
} 
+0

GetLength()の代わりに他のオプションを使用する必要はありません。 – ZLackLuster

+0

はい。 GetLengthメソッドは、選択したランクの長さを取得します。 Lengthプロパティは、配列内のアイテムの合計サイズのみを返します。これが最も正確な方法です。 – DigheadsFerke

0

は多次元配列(ここで使用される)と、ギザギザの配列(配列の配列)との違いの詳細についてはthis questionを参照してください。

あなたがそうのような多次元配列を宣言した場合:

:あなたはこのようなギザギザの配列を、宣言した場合

int value = math[1,2]; 

int [,] math = new int[3, 5]; 

をあなたはこのようにそれの値にアクセスする必要があります

int[][] math = new int[3][]; 
math[0] = new int[5]; 
math[1] = new int[5]; 
math[2] = new int[5]; 

(通常、サブアレイのサイズは変わるため、ギザギザです) 次に、あなたがなどの値にアクセス:あなたの特定の問題については

int value = math[1][2]; 

は、多次元配列を使用している場合、あなたはまた、使用する必要があります「Array.GetLength」のように:

for (int x = 0; x < array.GetLength(0); x++) 

取得します部品の個々の寸法(this questionのように)。あなたの例では、 '.Length'は、配列の最初の次元の長さではなく、の合計でです。