2016-06-21 13 views
-1

Sobald ich die While-Schleife eingeben, löst das Programm Index außerhalb des Bereichs Ausnahme, ohne Zeilen und Spalten Wert zu erhalten. getint ist eine Methode, um Benutzereingaben zu erhalten, während sicherstellen, dass die Werte in Reichweite sind2d Array-Index außerhalb des Bereichs Ausnahme

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

edit:

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

Was meinen Sie mit "ohne Zeilen- und Spaltenwert"? Wir haben keine Ahnung, was diese Methoden machen oder wie groß die Felder sind. Bitte geben Sie eine [MCVE] an. –

+0

Wenn die Ausnahme ausgelöst wird, sobald Sie die while-Schleife eingeben, liegt das Problem wahrscheinlich in 'getint()', aber Sie haben diesen Code nicht eingefügt. – itsme86

+0

Viel mehr Code erforderlich. Soll das zum Beispiel von unten nach oben gelesen werden? –

Antwort

0

, wenn der Code außerhalb der Grenzen nur in fields[row, column] die Sie passieren kann, können für einen Scheck hinzufügen aus der gebundenen von Reihen- und Spalten

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

Das prüft nur die untere Grenze. Und es ist mehr eine Klemme als ein Scheck. – itsme86

+0

Danke, ich habe meine Antwort aktualisiert, um auch die oberen Grenzen zu überprüfen –

0

so war der Fehler in while-Schleife, i die Tatsache übersehen, daß i globale Variable „check“ verwendet und hat zurückgesetzt sein Wert nicht so, wenn sie die Schleife verlassen ersten ti mir wurde sein Wert auf 0 gesetzt und damit die Ausnahme.

Verwandte Themen