2011-01-01 18 views
7

Espero que esta no sea una pregunta estúpida, pero he buscado cada ejemplo que puedo encontrar y todavía parece que tengo este código correcto y todavía no funciona ... Entro en uno número y se mueve a la siguiente línea de código en lugar de bucle. Estoy usando esto para llenar una matriz con los números de entrada del usuario. Agradezco cualquier ayuda, gracias.java for loop no funciona

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

Esto no debería incluso compilar. El 'i' no está declarado. A menos que tengas 'i' declarado globalmente en algún lugar en la parte superior. –

+1

Por esa razón, ninguno de los dos es 'Num',' keyboard', 'Sum', o' Product'. –

+0

Probablemente deberías seleccionar una respuesta a tu pregunta. – deterb

Respuesta

7

Noticed the ';' al final de for (i = 0; i < 9; i ++); ?^_^

4

eliminar el último punto y coma personaje de la línea de bucle ............

3

No debería haber un punto y coma al final de la primera línea. Indica que tu loop está vacío.

4

Para evitar este error en el futuro, siempre debe usar una variable nueva en un bucle for. En lugar de:

for (i = 0; ... 

escritura

for (int i = 0; ... 

De esa manera, sería un error en tiempo de compilación, ya que la variable i no estaría en su alcance en el siguiente bloque.

+0

Aunque recomendaría su táctica, no puedo ver cómo esto habría evitado este error de Steve – RoflcoptrException

+0

en el código 'for (int i = 0; i <5; i ++); {i ++; } 'el identificador' i' sale del alcance después del punto y coma y antes del bloque. –

+0

Habría reducido la probabilidad del error, ya que tendría el alcance para el ciclo for. Ahora Num [i] en el bloque de abajo funciona ya que obviamente se definió antes, pero de lo contrario seguiría un error de compilación y el programador se daría cuenta más fácilmente de que el enunciado compuesto (el bloque) y el bucle for están separados. –

16

El ; al final del bucle for se toma como una instrucción vacía, el equivalente de un bloque vacío para su bucle for. El compilador está leyendo su código como:

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

Retire la ; para obtener su comportamiento previsto.


Si no necesita el i fuera del bucle, se podía mover su declaración dentro de la instrucción for.

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

El uso de esta sintaxis cuando estaba presente habría producido un error de compilación que habría alertado a la errónea ; antes del punto y coma errónea ;. El compilador podría ver esto:

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

Este sería un ejemplo por qué es una buena práctica para limitar el alcance de las variables cuando sea posible.

+0

Guau, sabía que iba a ser algo estúpido ... arrrrgh. Muchas gracias sin embargo !! Ahora está funcionando como estaba previsto :) – Steve

0

La respuesta ya ha sido dada, pero me gustaría agregar que si está usando un IDE *, probablemente habrá una advertencia para ese tipo de declaraciones vacías y otro tipo de declaraciones fáciles de pasar, fáciles de pasar por alto. errores (asignar en lugar de comparar en condiciones, por ejemplo).

0

para hacerle saber. algo como esto:

for(;;) 
    ; 

debe enviar su programa a la espera de ocupado. me pasó en los primeros días.:)