Почему инициализация счётчика в цикле for приводит к ошибке not a statement?
Scanner in = new Scanner(System.in);
int i = in.nextInt();
for (i; i > 0; i--){
System.out.printf("Kvadrat %d is %d\n", i, i*i);
Проблему решил удалением инициализации счётчика, но мне хотелось бы узнать, почему этот код вызывает ошибку?
Ответы (2 шт):
По сути Вы сами и ответили на свой вопрос:
Проблему решил удалением инициализации счётчика...
То есть Вы в начале вместо того, чтобы присвоить переменной i какое-то значение, просто пишете данную переменную. Правила пишут, что первое выражение в for-циклах должно содержать инициализацию счётчика.
Как уже об этом сказал @4500zenja, первое выражение в цикле for — это выражение инициализации:
for (initialization; termination; increment) {
statement(s)
}
Отдельно стоящее i не является осмысленным выражением, поэтому компилятор выдает синтаксическую ошибку not a statement.
Чтобы исправить ошибку, вам нужно написать в качестве первого выражения цикла for что-то более осмысленное, например, объявление переменной:
for (int i = in.nextInt(); i > 0; i--) {
...
}
Либо присваивание переменной:
int i;
for (i = in.nextInt(); i > 0; i--) {
...
}
Если хотите объявить начало счетчика до цикла, то можно создать другую переменную:
int start = in.nextInt();
for (int i = start; i > 0; i--) {
...
}
Еще один способ, который будет работать: выражение инициализации можно опустить:
int i = in.nextInt()
for (; i > 0; i--) {
...
}