2017-12-28 3 views
0

Was ist das Problem hier? Ich habe einen Block mit 2500 Zufallszahl und ich möchte sie mit Blasensorte sortieren. Aber wenn ich das Programm ausführen Ich habe dies bekam:C# Blasensortierungsfehler?

System.IndexOutOfRangeException

Fehlercode danach:

if (szamok[i] > szamok[i + 1]). 

(Sorry für schlechtes Englisch: /)

 int r = 2500; 
     int seged; 


     while (r > 1) 
      { 
       for (int i = 0; i < 2500; i++) 
       { 
       if (szamok[i] > szamok[i + 1]) 
        { 
        seged = szamok[i + 1]; 
        szamok[i + 1] = szamok[i]; 
        szamok[i] = seged; 
        } 

       } 
      r = r - 1; 
      } 
+1

wenn '2500' die Größe der Sammlung ist, die Bedingung in der' for' sollte 'i <2500 - 1; ':' für (int i = 0; i <2500 - 1; i ++) {...} ' –

+0

Was ist der Wert von' i ', wenn die Ausnahme ausgelöst wird und wie viele Einträge gibt es in 'szamok'? Bei einem einfachen Debugging sollte Ihnen mitgeteilt werden, um was für einen ungültigen Index es sich handelt, anhand dessen Sie feststellen können, woher Ihr Problem stammt. – Chris

+2

Wenn Sie 2500 Elemente in einem Array haben, erscheinen sie bei den Indizes 0-2499. Welche Indizes erzeugt Ihr Code das letzte Mal durch seine Schleife, wenn "i" = 2499? –

Antwort

0

Der Fehler sagt es: Ihr Index ist außerhalb des Bereichs. Sie versuchen, auf ein Element in Ihrem Array nach dem letzten Element in diesem Array zuzugreifen.

Die Linie szamok[i] > szamok[i + 1] scheint der Schuldige zu sein. +1 ist eins zu viel.

Versuchen Sie Schleife zu ändern, so dass Sie nicht das letzte Element besuchen Sie aber nur die zweitletzte:

for (int i = 0; i < (2500-1); i++)