| 

.NET C# Java Javascript Exception

4
Ich habe in Java folgende Schleife programmiert:

for ( int a = 1, int b = 5; a <= b; a++ ) { }


Das Ergebnis ist ein Compilerfehler. Was mache ich falsch?
16.11.2011
Helge Ortwig 51 2
2 Antworten
1
Schreib das mal so:
for ( int a = 1, b = 5; a <= b; a++ ) { }

(ohne das 2. int)
16.11.2011
LiRo 1,3k 1 9
1
Hallo Helge,

die For-Schleife hat folgende Syntax:

for (initialization; termination; increment) {
statement(s)
}

Wenn du mehrere Variablen initialisieren willst musst du es folgendermaßen machen:

for ( int a = 1, b = 5; a <= b; a++ ) { }


Aber warum hast du dort zwei Integer? Kannst du die Termination Bedingung nicht statisch vergeben?
for ( int a = 1; a <= 5; a++ ) { }



Gruß Karl
16.11.2011
Karl 958 8
Die Bedingung muss noch nicht mal statisch sein, du kannst genauso... schreiben:
[code]
int b = 7;
for ( int a = 1; a <= b; a++ ) { }
[/code]
LiRo 16.11.2011
Ja, aber mir fallen (jetzt) partout keine Anwendungsfälle ein, wo ich zwei Variablen im Schleifenkopf initialisieren möchte.
Karl 16.11.2011
.. keine Anwendungsfälle ein, wo...

for (int a = 0, b = arr.length; a < b; a++) {}

// vs.

int b = arr.length;
for (int a = 0; a < b; a++) {}

Der Unterschied ist der Gültigkeitsbereich von b. Ob man's wirklich braucht, keine Ahnung. Aber es ist ein Anwendungsfall ;)
WolfgangKluge 17.11.2011
Die Frage die sich mir hier stellt ist; Optimiert das der Compiler nicht weg?
for (int a = 0; a < arr.length; a++) {}

Bin aber nicht so firm, dass ich den generierten Bytecode analysieren könnte :)
Karl 17.11.2011
So wie Du es geschrieben hast sicher nicht, da dadurch arr.length mehrfach aufgerufen wird (im anderen Fall nur 1x).
Potentiell kann sich arr.length während des Schleifendurchlaufs aber ändern - was also zu unterschiedlichem Verhalten führen würde.

Nimm nur mal an, dass es sich um eine (aufwendige) Funktion handelt - dann wird diese bei jedem Durchlauf neu ausgeführt. Manchmal wichtig (wenn der Wert abhängig von der Schleifenvariable ist), ansonsten nur langsam ;)
WolfgangKluge 18.11.2011
Stimmt - ich habe mir das Bytecode Plugin für Eclipse gezogen und mal ein bisschen gestöbert. Ist so wie du sagst...
Karl 19.11.2011

Stelle deine Java-Frage jetzt!