Überprüfung, ob Array aufsteigend sortiert

jsliderex

Mitglied
Hallo Leute!

Bin ein bisschen am programmieren und möchte gerne ein Programm realisieren, dass feststellt ob ein Array aufsteigend sortiert ist oder nicht.
Nun funkioniert dieses aber nur halb, sprich wenn ich ein aufsteigend sortiertes Array eingebe, sagt mir das Programm richtigerweise "Aufsteigend sortiert". Wenn ich jedoch ein absteigend sortiertes Array eingebe, meldet der Compiler einen "ArrayIndexOutOfBounds" -Error.

Wäre sehr dankbar, wenn jemand einen Tipp für mich hätte 🙂

Hier mein Code:
Java:
public static boolean isAscending(int[] a, int length) {
		for (int i = 0; i <= length; i++) {

			if (a[i] < a[i + 1]) {
				return true;
			}
		}

		return false;

	}

	public static void main(String[] args) {

		int zahlen;
		int length = In.readInt();
		int[] a = new int[length];
		for (int i = 0; i < length; i++) {
			Out.println("Bitte " + i + "te Zahl eingeben");
			zahlen = In.readInt();
			a[i] = zahlen;

		}
		if (isAscending(a, length)) {
			Out.println("Aufsteigend sortiert");
		} else {
			Out.println("Nicht aufsteigend sortiert");
		}
	}
 
Zeile 2:
[c]for (int i = 0; i < length-1 ; i++) {[/c]
Dein Programm is aber falsch, denn es gibt true zurück, wenn bereits das zweite Element grösser als das erste ist.
 
Dein erster Fehler ist, dein return true; 😀
Denn sobald ein return folgt, wird die Methode nicht weiter ausgeführt, was bedeutet, du überprüfst immer nur die ersten beiden Werte im Array.

Die Exception kommt, weil du bis <= length iterierst ! (schonmal komisch)...dann aber sogar noch einen drauf setzt und i+1 probierst anzusprechen! Das wäre also Arrayplatz lenght+1 !
 
Ah, Ok das leuchtet natürlich ein!
Herzliches Dankeschön an euch beide!

Hatte mir gedacht dass das
for (int i = 0; i <= length; i++)
if (a < a[i + 1])
das komplette Array durchläuft und alle Werte überprüft!

Sorry für die "blutige Anfänger" - Frage,
hab erst vor kurzem begonnen, Java zu lernen und tu mir noch ziemlich schwer damit. 😳
 
so sollte es funzen:

Java:
public static boolean isAscending(int[] a, int length) {
		for (int i = 0; i < length-1; i++) {

			if (a[i] > a[i + 1]) {
				return false; // vorgänger ist größer als nachfolger => abbruch 
			}
		}

		return true; // alle vorgänger sind kleiner/gleich nachfolger 

	}

	}
 

Neue Themen


Zurück
Oben