Почему инициализация счётчика в цикле 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 шт):

Автор решения: 4500zenja

По сути Вы сами и ответили на свой вопрос:

Проблему решил удалением инициализации счётчика...

То есть Вы в начале вместо того, чтобы присвоить переменной i какое-то значение, просто пишете данную переменную. Правила пишут, что первое выражение в for-циклах должно содержать инициализацию счётчика.

→ Ссылка
Автор решения: Vadik

Как уже об этом сказал @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--) {
    ...
}
→ Ссылка