Überprüfen, ob ein array sortiert ist, true oder false zurückgeben
Ich Schreibe ein einfaches Programm, das nur true zurück, wenn ein array sortiert ist, sonst false und ich bekomme immer eine exception in eclipse, und ich kann einfach nicht herausfinden, warum. Ich Frage mich, wenn jemand könnte einen Blick auf meinen code und erklären, warum ich bin immer ein array out of bounds exception. Danke für Eure Hilfe im Voraus.
public static boolean isSorted(int[] a)
{
int i;
for(i = 0; i < a.length; i ++);{
if (a[i] < a[i+1]) {
return true;
} else {
return false;
}
}
}
public static void main(String[] args)
{
int ar[] = {3,5,6,7};
System.out.println(isSorted(ar));
}
post die Ausnahme
Laufen durch den code. Sie haben 4 Einträge, sollte es einfach sein.
überprüfen Sie Ihre index-Grenzen
Beachten Sie auch, dass der code nicht tut, was Sie sagen. Es wird true zurückgeben, wenn es zwei oder mehr aufeinander folgenden geordneten Elemente, aber nicht unbedingt alle.
Tipp beginnen Sie Ihre Schleife bei i=1 und vergleichen Sie niedriger sein, wenn die Länge >1
Laufen durch den code. Sie haben 4 Einträge, sollte es einfach sein.
i
gleich 3 an einem gewissen Punkt, was eine[3+1] versuchen Sie, zuzugreifen?überprüfen Sie Ihre index-Grenzen
Beachten Sie auch, dass der code nicht tut, was Sie sagen. Es wird true zurückgeben, wenn es zwei oder mehr aufeinander folgenden geordneten Elemente, aber nicht unbedingt alle.
Tipp beginnen Sie Ihre Schleife bei i=1 und vergleichen Sie niedriger sein, wenn die Länge >1
InformationsquelleAutor user2101463 | 2013-10-18
Du musst angemeldet sein, um einen Kommentar abzugeben.
Schauen wir uns eine sauberere version der Schleife, die Sie gebaut:
Sollte ich zuerst darauf hinweisen, die syntax-Fehler in der original-Schleife. Nämlich, es ist ein Semikolon (
;
) vor der geschwungenen Klammer ({
) , beginnt der Körper der Schleife. Das Semikolon entfernt werden.Beachten Sie auch, dass ich neu formatiert white-space der code um Sie lesbarer zu machen.
Nun lassen Sie uns diskutieren, was passiert im Regelkreis. Die loop-iterator
i
beginnt bei0
und endet ama.length - 1
. Dai
Funktionen als index für das array, ist es sinnvoll, darauf hinzuweisen, dassa[0]
ist das erste element unda[a.length - 1]
das Letzte element deines array. Jedoch, in den Körper der Schleife, die Sie geschrieben haben einen index voni + 1
als gut. Dies bedeutet, dass, wenni
gleicha.length - 1
, Ihr index ist gleicha.length
die außerhalb der Begrenzungen des Arrays.Die Funktion
isSorted
hat auch erhebliche Probleme, da gibt es true zurück das erste mala[i] < a[i+1]
, und false, wenn er das erste mal nicht; ergo ist es nicht wirklich überprüfen, ob das array sortiert an alle! Eher, es wird nur geprüft, wenn die ersten beiden Einträge sind sortiert.Einer Funktion mit ähnlicher Logik, aber das prüft, ob das array richtig sortiert ist
fühlt sich plausibel an jedem Datenpunkt die Veränderung der frühen outing ist 0.5, also die Durchschnittliche Zeit, muss die Komplexität noch viel weniger als O(n)
InformationsquelleAutor Richard Tingle
Mit diesem Ausdruck
a[i+1]
sind, laufen Sie über das Ende des Arrays.Wenn Sie müssen vergleichen, um das nächste element, dann stoppen Sie Ihre iteration 1 element früh (und zu beseitigen, das Semikolon, der Java interpretieren würde, wie Ihr
for
loop body):InformationsquelleAutor rgettman
verarbeitet, wenn der erste Teil ist falsch
InformationsquelleAutor Shogun
Prüfen, ob array sortiert ist oder nicht, können wir vergleichen benachbarte Elemente im array.
Überprüfen Randbedingungen
null
&a.length == 0
InformationsquelleAutor savanibharat
a[i+1]
wenni == a.length
geben Sie den Fehler zu finden.Beispielsweise in einem array der Länge 10, Sie haben die Elemente 0 bis 9.
a[i+1]
wenni
ist 9, wird sich zeigena[10]
, die ist out of bounds.Beheben:
Auch, dein code überprüft nicht durch das gesamte array, sobald Rückkehr aufgerufen wird, wird der Check-Schleife beendet.
Sie sind einfach die Kontrolle der erste Wert, und nur der erste Wert.
Ja, du hast ein Semikolon nach deiner for-Schleife Erklärung, die auch Probleme verursachen
InformationsquelleAutor EyeOfTheHawks
Für alle, die mit Java 8 und höher, hier ist ein einfacher one-liner:
Oder ein logisch gleichwertige alternative:
Vielen Dank für den Hinweis.
anyMatch
hättenoneMatch
.Willkommen mate 🙂
InformationsquelleAutor Jacob G.
Sollten Sie nicht verwenden
a[i+1]
da dieser Wert möglicherweise oder möglicherweise nicht aus dem array.Beispiel:
Dieses Problem zu beheben, stoppen Sie die Schleife ein Anfang.
Sorry, sind Sie richtig. Behoben.
InformationsquelleAutor dtgee
Einem array ist absteigend sortiert. Berücksichtigt sowohl aufsteigender und absteigender arrays, verwende ich die folgenden:
InformationsquelleAutor Samil
Diese Funktion prüft, ob das array in Aufsteigender Reihenfolge oder nicht.
Herzlich willkommen auf Stack Overflow! Während dieses code-snippet lösen können, die Frage ist, einschließlich einer Erklärung der wie und warum das löst das problem wirklich helfen würde zu verbessern, die Qualität Ihrer post. Denken Sie daran, dass Sie die Beantwortung der Frage für die Leser in der Zukunft, nicht nur die person, die jetzt! Bitte Bearbeiten Ihre Antwort zur Erklärung hinzufügen, und geben Hinweise darauf, welche Einschränkungen und Annahmen anwenden.
Herzlich willkommen auf stack overflow 🙂 schauen Sie Bitte auf Beantworten. Sie sollten einige Informationen, warum dein code löst das problem. Code-nur die Antworten sind nicht nützlich für die Gemeinschaft.
InformationsquelleAutor Bhuvanachandu
i
? Wo hast du das erklären? Sie sind Validierung eines Aszendent oder Nachkomme Sortieren? Versuchen Sie, nicht zu Antworten, nur mit code. Überprüfen Sie die Beantworten für weitere details.InformationsquelleAutor shashi ilakal
Array.der Prototyp.jeder
Den jeder() Methode testet, ob alle Elemente im array den test zu bestehen, umgesetzt von der vorgesehenen Funktion.
Diese Antwort ist falsch, nicht nur weil es für
js
, sondern auch, weil es nicht das tut, was es tun soll.every
Funktions-tests nur ein element in der Zeit, so argb
in diesem Fall ist der index des Elementsa
. Also die Funktionen nur tests, wennarr[i] > i
. Für[5, 3, 5]
es gibttrue
, während für[0, 1, 2]
es gibtfalse
.InformationsquelleAutor iamwhitebox