;
в конце цикла for принимается как пустой оператор, эквивалент пустого блока для вашего цикла for. Компилятор читает ваш код как:
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];
}
Удалите ;
, чтобы получить желаемое поведение.
Если вам не нужен i
вне цикла, вы можете переместить его объявление в оператор for
.
for(int i=0; i<9; i++)
{
// `i` is only usable here now
}
// `i` is now out of scope and not usable
Использование этого синтаксиса при наличии ошибочной точки с запятой ;
привело бы к ошибке компиляции, которая предупредила бы вас о ошибочной ;
ранее. Компилятор увидит это:
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];
}
Это пример того, почему эффективная практика - ограничивать область видимости переменных, когда это возможно.