Erweiterte For-Schleife... -.-

js007

Neues Mitglied
hey leute,

ich hab folgendes Problem.
Ich will ein Programm schreiben, dass ein Array überprüft, die größte und die kleinste Zahl löscht, den rest summiert und dann ausgibt.
ich habe die lösung zu dem Programm, aber nur mit der erweiterten for-schleife,
kann man das programm nicht einfach mit der normalen schreiben?!

Lösung der Methode:

Java:
	static int gesamtNote( int[]a ) {
		if (a == null || a.length <= 2 )
			throw new IllegalArgumentException("Das Feld ist ein ungültiges");
		int min = 20, max = 0, sum = 0;
		for ( int i : a) {
			if (i < 0 || i > 20)
				throw new IllegalArgumentException("Falsche Eingabe");
		if (i > max) max = i;
		if (i < min) min = i;
		sum += i;
		}
		return sum-min-max;
	}

Meine Vorstellung, einfach der Verständnis wegen, da ich die erweiterte Schleife einfach nicht auf den Schirm bekomme.

Java:
	static int gesamtNote( int[]a ) {
		if (a == null || a.length <= 2 )
			throw new IllegalArgumentException("Das Feld ist ein ungültiges");
		int min = 20, max = 0, sum = 0;
		for (int i = 0; i <= a.length; i++ ) {
			if (a[i] < 0 || a[i] > 20)
				throw new IllegalArgumentException("Falsche Eingabe");
		if (a[i] > max) max = a[i];
		if (a[i] < min) min = a[i];
		sum += a[i];
		}
		return sum-min-max;
	}

Irgendwas muss ich falsch machen, wenn ich die Werte des Arrays aufrufe, dass er damit die Schleife durchläuft.

Das a, ich glaub ich hab da einfach nen kleinen Denkfehler!!???:L;(

ODER!! geht das überhaupt?! Kann ich die normale for-schleife nutzen?!
Ob es sinnvoller so oder so ist, ist erstmal egal, ich möchte das Grundprinzip verstehen, da ich alles schon mehrmals gegoogelt etc. habe und es einfach nicht verstehe, dachte ich ihr könnt mir helfen!!

danke
js007
 
Zuletzt bearbeitet:
Zu mindestens muss es schon mal so lauten 😉

Code:
for (int i = 0; i < a.length; i++ )

Ja kannst du, die Extended-For wird intern auch nur in eine normale For-Schleife umgewandelt. Die Extended-For (oder auch ForEach genannt) ist damit sogenannte Compiler-Magic, da der Compiler etwas kennt und so umbaut, dass es auch die VM kennt.
 
Hi js007,

du solltest in jedem Fall versuchen, die for-each Schleife zu verstehen, da dies spätestens bei verschachtelten Schleifen leicht zu Fehlern führen kann. Also alles wo du nur die Array Elemente bekommen musst -> foreach. Für die Fälle wo du Arrayindizes neu belegen musst, wirst du nach wie vor die erweiterte for Schleife benutzen müssen.

Zum Fehler:
Java zählt Array Indizes von 0 an. D.h. du hast array noten int[] {1, 2}, dass hat Länge 2. Wenn du so iterierst
Java:
for (int i = 0; i <= a.length; i++ ) {
 System.out.println("Note " + i + " ist " + noten[i]);
}

wird natürlich folgendes passieren:
Note 0 ist 1
Note 1 ist 2
java.lang.ArrayIndexOutOfBoundsException

Warum? weil du durch das kleinergleich i bis 2 laufen lässt, ein noten[2] existiert aber nicht mehr.

Mfg
Bergtroll
 

Zurück
Oben