2016-06-21 21 views
-1

whileループに入ると、プログラムは行と列の値を取得せずに、インデックスから範囲外の例外をスローします。 GetIntでは、値が範囲内にあることを確認しながら、ユーザー入力を取得するための方法である2d配列のインデックスが範囲外の例外

while(filled>0) 
     { 
      row = getint("row: "); 
      row--; 
      column = getint("column: "); 
      column--; 
      fields[row, column]=getint("value: "); 
      filled--; 
     } 

編集:範囲外のコードのみfields[row, column]に発生する可能性があれば

static int getint(string question) 
    { 
     string temp; 
     int tempint=0; 
     while (check != 0) 
     { 
      check = 0; 
      Console.Write("\nPlease enter the {0}",question); 
      temp = Console.ReadLine(); 
      if(!int.TryParse(temp, out tempint)) 
      { 
       check++; 
      } 
      if(question.Length<14 & (tempint<1 | tempint>9)) 
      { 
       check++; 
       Console.WriteLine("Invalid Input"); 
      } 
     } 
     return tempint; 
    } 
+3

"行と列の値を取得しない"とはどういう意味ですか?私たちは、それらのメソッドが何をしているのか、あるいは 'フィールドの大きさが何であるかは分かりません。 [mcve]を入力してください。 –

+0

whileループに入るとすぐに例外がスローされると、問題はおそらく 'getint()'にありますが、そのコードをインクルードできませんでした。 – itsme86

+0

多くのコードが必要です。これは例えば下から上への読み方を意味していますか? –

答えて

0

は、あなたがのためのチェックを追加することができます、私は「チェック」グローバル変数を使用して、最初のループを終了するときに、TIので、その値をリセットしていないという事実を見逃してループしながら、行と列の境界の外に

row = Math.Max(row,0); 
column= Math.Max(column,0); 

row = Math.Min(fields.GetUpperBound(0), row); 
column= Math.Min(fields.GetUpperBound(1), column); 
+0

これは下限のみをチェックします。それはチェックよりもクランプのほうが多い。 – itsme86

+0

ありがとう、私は上の境界を同様にチェックするように私の答えを更新しました –

0

ので、エラーがでました私の値は0に設定されていたため、例外が発生しました。

関連する問題