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.
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. –
Por esa razón, ninguno de los dos es 'Num',' keyboard', 'Sum', o' Product'. –
Probablemente deberías seleccionar una respuesta a tu pregunta. – deterb