# Überprüfung, ob Array aufsteigend sortiert



## jsliderex (5. Jan 2010)

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:

```
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");
		}
	}
```


----------



## javimka (5. Jan 2010)

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.


----------



## eRaaaa (5. Jan 2010)

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 !


----------



## jsliderex (5. Jan 2010)

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. _


----------



## Final_Striker (5. Jan 2010)

so sollte es funzen:


```
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 

	}

	}
```


----------



## Landei (5. Jan 2010)

Der Parameter length ist überflüssing. In der Schleife kann man genausogut a.length schreiben.


----------



## jsliderex (5. Jan 2010)

Danke euch allen für die schnelle Hilfe, 
jetzt funzt es und verstehen tu ichs auch! :toll:

Schönen Abend wünsch ich euch noch!


----------

