2011-01-01 22 views
7

Mam nadzieję, że to nie jest głupie pytanie, ale sprawdziłem każdy przykład, jaki mogę znaleźć i nadal wygląda na to, że mam ten kod poprawnie i nadal nie działa ... Wchodzę w jedną numer i przechodzi do następnego wiersza kodu zamiast do pętli. Używam tego do wypełnienia tablicy danymi wejściowymi użytkownika. Doceniam każdą pomoc, dzięki.java dla pętli nie działa

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

To nie powinno się nawet kompilować. Symbol "i" nie jest zadeklarowany. O ile nie masz "i" zadeklarowanego globalnie gdzieś na górze. –

+1

W tym sensie nie ma również "Num", "keyboard", "Sum" lub "Produkt". –

+0

Prawdopodobnie powinieneś wybrać odpowiedź na swoje pytanie. – deterb

Odpowiedz

7

Zauważono ";" na końcu (i = 0; i < 9; i ++); ?^_^

4

usunąć ostatni znak średnika na linii z pętli ............

3

Nie powinno być średnik na końcu pierwszego wiersza. Wskazuje, że twoja pętla jest pusta.

4

Aby uniknąć tego błędu w przyszłości, należy zawsze używać świeżej zmiennej w pętli for. Zamiast:

for (i = 0; ... 

zapisu

for (int i = 0; ... 

ten sposób byłby to błąd kompilacji, ponieważ zmiennej i nie byłoby w zakresie w następnym wierszu.

+0

Mimo że zalecałbym twoją taktykę, nie widzę, jak to by było uniknąć tego błędu Steve'a – RoflcoptrException

+0

w kodzie 'for (int i = 0; i <5; i ++); {i ++; } 'identyfikator' i' wychodzi poza zakresem po średniku i przed blokiem. –

+0

Zmniejszyłoby to prawdopodobieństwo pomyłki, ponieważ byłbym ograniczony do pętli for. Teraz Num [i] w bloku poniżej działa, ponieważ oczywiście został wcześniej zdefiniowany, ale w przeciwnym razie wystąpiłby błąd kompilacji, a programista łatwiej zorientowałby się, że instrukcja złożona (blok) i pętla for są rozdzielone. –

16

Na końcu pętli for przyjmuje się pustą instrukcję, odpowiednik pustego bloku dla pętli for. Kompilator odczytuje kod jako:

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];  
} 

Zdjąć ; aby uzyskać zamierzone zachowanie.


Jeśli nie potrzebujemy i zewnątrz pętli, można przenieść swoją deklarację w oświadczeniu for.

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

Używając tej składni, gdy błędne średnik ; był obecny byłby produkowany błąd kompilacji, który zaalarmował do błędnego wcześniejszym ;. Kompilator będzie zobaczyć:

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];  
} 

Byłby to przykład, dlaczego jest to dobra praktyka, aby ograniczyć zakres zmiennych, jeśli to możliwe.

+0

Wow, wiedziałem, że to będzie coś głupiego ... arrrrgh. Wielkie dzięki! Działa teraz zgodnie z przeznaczeniem :) – Steve

0

Odpowiedź została już udzielona, ​​ale chciałbym dodać, że jeśli używasz IDE *, prawdopodobnie pojawi się ostrzeżenie dla tego rodzaju pustych instrukcji i innych łatwych do wykonania, łatwych do przeoczenia typów błędy (np. zamiast porównywania w warunkach).

0

tylko po to, aby Cię powiadomić. coś takiego:

for(;;) 
    ; 

powinien wysłać twój program do zajętego oczekiwania. zdarzyło mi się we wczesnych dniach.:)