Java для цикла не работает - PullRequest
       1

Java для цикла не работает

7 голосов
/ 01 января 2011

Я надеюсь, что это не глупый вопрос, но я посмотрел каждый пример, который смог найти, и все еще кажется, что у меня есть этот код правильно, и он все еще не работает ... Я ввожу одно число, и оно продолжаетсяна следующую строку кода вместо цикла.Я использую это, чтобы заполнить массив числами пользовательского ввода.Я ценю любую помощь, спасибо.

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

Ответы [ 8 ]

17 голосов
/ 01 января 2011

; в конце цикла 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];      
} 

Это пример того, почему эффективная практика - ограничивать область видимости переменных, когда это возможно.

7 голосов
/ 01 января 2011

заметил ';' в конце for (i = 0; i <9; i ++); ? ^ _ ^ </p>

4 голосов
/ 01 января 2011

Чтобы избежать этой ошибки в будущем, вы всегда должны использовать новую переменную в цикле for. Вместо:

for (i = 0; ...

запись

for (int i = 0; ...

Таким образом, это будет ошибка времени компиляции, поскольку переменная i не будет находиться в области видимости в следующем блоке.

4 голосов
/ 01 января 2011

удалить последнюю точку с запятой в строке цикла ............

3 голосов
/ 01 января 2011

В конце первой строки не должно быть точки с запятой. Это означает, что ваш цикл пуст.

0 голосов
/ 18 марта 2019

Просто удалите эту точку с запятой после "for (....)"

for(i=0; i<9; i++); //<---------- over here

вам не нужно ставить точку с запятой здесь. Скорее всего, вы знали об этом, это происходит. Дополнительные баллы: Синтаксис для "for":

for(initializer; condition; change){
//code here
}

Синтаксис для while:

while(condition without semi-colon){
//code here
}

Синтаксис "do-while":

do{
//code here
}while(condition);//<---------------semi-colon here.

Скорее всего, вы запутались между циклами "for" и "do-while". Я тоже, когда был новичком, когда-то путался с такими вещами.

0 голосов
/ 01 января 2011

просто чтобы вы знали. как то так:

for(;;)
  ;

должен отправить вашу программу в состояние ожидания ожидания. случилось со мной в первые дни. :)

0 голосов
/ 01 января 2011

Ответ уже был дан, но я хотел бы добавить, что если вы используете IDE *, вероятно, будет предупреждение о таких пустых утверждениях и других легко совершаемых, легко пропускаемых типах ошибок. (вместо того, чтобы сравнивать в условиях, например).

...