die bei einer saubereren Version der Schleife aussehen Lassen Sie konstruiert:
for (i = 0; i < a.length; i++); {
if (a[i] < a[i + 1]) {
return true;
}
else {
return false;
}
}
Ich sollte zuerst die Syntaxfehler in der ursprünglichen Schleife hinweisen. Es gibt nämlich ein Semikolon (;
) vor der geschweiften Klammer ({
), die den Körper der Schleife startet. Dieses Semikolon sollte entfernt werden. Beachten Sie auch, dass ich den Leerraum des Codes neu formatiert habe, um ihn lesbarer zu machen.
Jetzt diskutieren wir, was in Ihrer Schleife passiert. Der Schleifeniterator i
beginnt bei 0
und endet bei a.length - 1
. Da i
als Index für Ihr Array fungiert, macht es Sinn, darauf hinzuweisen, dass a[0]
das erste Element und a[a.length - 1]
das letzte Element Ihres Arrays ist. Im Körper Ihrer Schleife haben Sie jedoch auch einen Index von i + 1
geschrieben. Das bedeutet, wenn i
gleich a.length - 1
ist, ist Ihr Index gleich a.length
, die außerhalb der Grenzen des Arrays ist.
Die Funktion isSorted
hat auch erhebliche Probleme, wie es beim ersten Mal a[i] < a[i+1]
wahr und falsch das erste Mal ist es nicht; Ergo überprüft es eigentlich nicht, ob das Array überhaupt sortiert ist! Es prüft nur, ob die ersten beiden Einträge sortiert sind.
Eine Funktion mit ähnlichen Logik, aber das ist wirklich sortiert ist, wenn das Array prüft
ist
public static boolean isSorted(int[] a) {
// Our strategy will be to compare every element to its successor.
// The array is considered unsorted
// if a successor has a greater value than its predecessor.
// If we reach the end of the loop without finding that the array is unsorted,
// then it must be sorted instead.
// Note that we are always comparing an element to its successor.
// Because of this, we can end the loop after comparing
// the second-last element to the last one.
// This means the loop iterator will end as an index of the second-last
// element of the array instead of the last one.
for (int i = 0; i < a.length - 1; i++) {
if (a[i] > a[i + 1]) {
return false; // It is proven that the array is not sorted.
}
}
return true; // If this part has been reached, the array must be sorted.
}
Post die Ausnahme – Cruncher
Führen Sie Ihren Code durch. Sie haben 4 Einträge, es sollte einfach sein. "i" wird irgendwann gleich 3, was wird ein [3 + 1] versuchen zu erreichen? – cklab
überprüfen Sie Ihre Indexgrenzen –