2016-09-17 5 views
-1

Ich kann nicht verstehen, was los ist.Wie behebt man einen "IndexOutOfRange Exception" Fehler?

 static int WinningColumn() 
    { 
     Random rnd = new Random(46); 

     int[] winningnumbers = new int[6]; 
     int[] Check = new int[46]; 
     int i; 
     for (i = 0; i < winningnumbers.Length; i++) 
     { 
      winningnumbers[i] = rnd.Next(46); 
      Check[winningnumbers[i]]++; 

      if (Check[winningnumbers[i]] > 1) 
      { 
       i--; 
       continue; 
      } 

Der Fehler tritt hier:

 } 
     return winningnumbers[i]; 
     } 
+0

Nützliche Posting-Tipps: (1) suchen Sie immer nach Fehlern hier und auf Ihrer bevorzugten Suchmaschine vor dem Posten, (2) fügen Sie 'Hilfe bitte' nirgends in Ihrem Beitrag und besonders in Ihrem Titel, wie es allgemein angezeigt wird als eine Form des Bettelns; (3) Verwenden Sie nützliche Titel wie "Wie kann ich herausfinden, warum eine IndexOutOfRange-Ausnahme in einem C# -Programm auftritt?", (4) recherchieren Sie das Problem nach Möglichkeit und zeigen Sie uns, was Sie versucht haben, es zu debuggen. Ich hoffe, das hilft. – halfer

Antwort

1

beim verlassen der for-Schleife einen Wert größer als der maximale Index der Indexer Variable i möglich ist (Es ist die Bedingung, die die Schleife bricht).
In Ihrem Fall hat die Variable i den Wert 6, aber der maximale Index für das Array winningnumbers ist 5. (0 bis 5 sind sechs ganzzahlige Elemente).

Es ist nicht klar, was ist Ihre Absicht, aber die Annahme, dass Ihr Zweck sechs zu erzeugen, ist Gewinnzahl im Bereich von 0 bis 45, dann sollten Sie den Code neu geschrieben und

static List<int> WinningColumn() 
{ 
    // Do not initialize Random with a fixed value 
    // You will get always the same 'random' sequence 
    Random rnd = new Random(); 

    // Create a list to store the winners 
    List<int> winningnumbers = new List<int>(); 
    int i = 0; 
    while(i < 6) 
    { 
     int newNumber = rnd.Next(46); 
     if(!winningnumbers.Contains(newNumber)) 
     { 
      // If the list doesn't contain the number the add it and increment i 
      // Otherwise run the loop again.... 
      winningnumbers.Add(newNumber); 
      i++; 
     } 
    } 

    // This returns the whole list to the caller, 
    // you can use it as an array 
    return winningnumbers; 
} 

Beachten Sie, dass Ihr tatsächliche auf diese Weise vereinfacht werden Code enthält einen Fehler in der Deklaration des Zufallszahlengenerators. Sie übergeben einen Initial Seed und somit startet der Zufallsgenerator bei jedem Aufruf dieser Methode erneut mit der gleichen Zahlenfolge. Das Ergebnis wäre eine identische Liste von Zahlen. Not very random to me
Wenn Sie nichts übergeben, wird der Generator mit der Systemzeit initialisiert und sollte daher jedes Mal anders sein, wenn Sie diese Methode aufrufen.

0

Ich weiß nicht, was Sie hier erreichen wollen.

Aber die Schleife würde enden, wenn ich Sie versuchen winningnumbers im Grunde So 6. wird Zugriff [6], die seit winningnumbers Array Länge 6, so können Sie Index von 0 bis 5.

Sie verwenden ist falsch kann mit winningnumbers versuchen [i-1]

Verwandte Themen