2011-01-01 10 views
7

Ich hoffe, das ist keine dumme Frage, aber ich habe jedes Beispiel nachgeschlagen, das ich finden kann, und es scheint immer noch, als hätte ich diesen Code richtig und es funktioniert immer noch nicht ... Ich gebe einen ein Nummer und es geht weiter zur nächsten Zeile des Codes statt Schleifen. Ich verwende das, um ein Array mit Benutzereingabenummern zu füllen. Ich schätze jede Hilfe, danke.java for loop funktioniert nicht

for(i=0; i<9; i++); 
{ 
    System.out.println ("Please enter a number:"); 
    Num[i] = keyboard.nextDouble(); 
    Sum += Num[i];  
    Product *= Num[i];  
} 
+1

Das könnte nicht einmal kompilieren. Das 'i' ist nicht deklariert. Es sei denn, Sie haben "ich" global irgendwo oben erklärt. –

+1

Von diesem rationalen, ist weder 'Num',' Tastatur', 'Sum' oder' Produkt'. –

+0

Sie sollten wahrscheinlich eine Antwort auf Ihre Frage auswählen. – deterb

Antwort

7

bemerkte das ';' am Ende von für (i = 0; i < 9; i ++); ?^_^

4

das letzte Zeichen von Semikolon für Loopleitung entfernen ............

3

es nicht ein Semikolon am Ende der ersten Linie sein sollte. Es zeigt an, dass Ihre Schleife leer ist.

4

Um diesen Fehler in Zukunft zu vermeiden, sollten Sie immer eine neue Variable in einer for-Schleife verwenden. Statt:

for (i = 0; ... 

Schreib

for (int i = 0; ... 

diese Weise ist es einen Fehler bei der Kompilierung sein würde, da die Variable i in ihrem Umfang nicht im folgenden Block sein würde.

+0

Obwohl ich deine Taktik empfehlen würde, kann ich nicht sehen, wie dies diesen Fehler von Steve – RoflcoptrException

+0

im Code 'für (int i = 0; i <5; i ++) hätte vermeiden können; {i ++; } 'Der Bezeichner' i' verlässt den Gültigkeitsbereich nach dem Semikolon und vor dem Block. –

+0

Es hätte die Wahrscheinlichkeit des Fehlers reduziert, da ich auf die for-Schleife beschränkt wäre. Nun funktioniert Num [i] in dem Block darunter, da ich offensichtlich vorher definiert worden bin, aber ansonsten würde ein Kompilierfehler folgen und der Programmierer würde leichter feststellen, dass die zusammengesetzte Anweisung (der Block) und die for-Schleife getrennt sind. –

16

Die ; am Ende der for-Schleife wird als leere Anweisung genommen, das Äquivalent eines leeren Blocks für Ihre for-Schleife. Der Compiler liest den Code wie:

int i; 
.... 
for(i=0; i<9; i++) 
    /* no-op */; 

/* inline block with no relation to for-loop */ 
{ 
    System.out.println ("Please enter a number:"); 
    Num[i] = keyboard.nextDouble(); 
    Sum += Num[i];  
    Product *= Num[i];  
} 

die ; Entfernen Sie Ihr gewünschtes Verhalten zu erhalten.


Wenn Sie die i außerhalb der Schleife nicht benötigen, können Sie seine Erklärung in der for Aussage bewegen.

for(int i=0; i<9; i++) 
{ 
    // `i` is only usable here now 
} 
// `i` is now out of scope and not usable 

Mit dieser Syntax, wenn der fehlerhafte Semikolon ; vorhanden war, würde einen Compiler-Fehler erzeugt haben, die Sie auf die fehlerhafte ; früher gewarnt würde. Der Compiler würde dies sehen:

for(int i=0; i<9; i++) 
    /* no-op */; 

/* inline block with no relation to for-loop */ 
{ 
    System.out.println ("Please enter a number:"); 
    Num[i] = keyboard.nextDouble();  // compile error now - `i` is out-of-scope 
    Sum += Num[i];  
    Product *= Num[i];  
} 

Dies wäre ein Beispiel, warum es sinnvoll ist, den Umfang der Variablen zu begrenzen, wenn möglich.

+0

Wow, ich wusste, dass es etwas Dummes sein würde ... Arrrrgh. Vielen Dank !! Es funktioniert jetzt wie vorgesehen :) – Steve

0

Die Antwort wurde bereits gegeben, aber ich möchte hinzufügen, dass wenn Sie eine IDE * verwenden, wird es wahrscheinlich eine Warnung für diese Art von leeren Aussagen und andere leicht zu machen, leicht zu übersehen Art von Fehler (Assing statt Vergleich in Bedingungen zum Beispiel).

0

nur um Sie wissen zu lassen. etwas wie dieses:

for(;;) 
    ; 

sollte senden Sie Ihr Programm in busy-Warten. ist mir in den frühen Tagen passiert.:)