Странная задача на циклы

Есть такая задача:

Бесконечный цикл while (true) с прерыванием break применяется для решения достаточно ограниченного спектра задач. Чаще всего его удобнее заменить на цикл while с условием. Потренируйтесь это делать. Эта программа с помощью бесконечного цикла суммирует числа, которые вводит пользователь. Она работает до тех пор, пока не будет введён 0. Перепишите её, заменив бесконечный цикл на цикл while с условием.

Вот исходный код, который нужно дописать:

import java.util.Scanner;

class Praktikum {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int sum = 0; // Сумма
        int input; // Ввод пользователя

        while (true) {
            input = scanner.nextInt();
            if (input == 0) {
                break;
            }
            sum = sum + input;
        }
        System.out.println("Сумма введённых чисел: " + sum);
    }
}

Вот подсказка к решению:

  1. Цикл должен выполняться до тех пор, пока пользователь не введёт 0, то есть значение переменной input не равно нулю. Это и станет его условием input != 0.
  2. Переменной input нужно присваивать значение перед циклом и внутри него, так как считывать ввод пользователя придётся и там, и там.

Вот мой код, который компилятор не принимает:

import java.util.Scanner;

class Praktikum {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int sum = 0; // Сумма
        int input; // Ввод пользователя
        
        while (int input != 0) {  
            input = scanner.nextInt();
            sum = sum + input;
        }
        if (int input == 0) {
            break;
        }
        System.out.println("Сумма введённых чисел: " + sum);
    }
}

Компилятор выдаёт следующее:

Вывод Ошибка препроцессинга: Не используйте break и while(true) Failed compilation

Т.е., если я правильно понимаю, прерывать цикл с помощью break не разрешается. Но как тогда решить задачу? Или же я неправильно понимаю задание...

Заранее благодарю за помощь.


Ответы (3 шт):

Автор решения: Владимир Клыков
import java.util.Scanner;

class Praktikum {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int sum = 0; // Сумма
        int input = scanner.nextInt(); //  <- 2. Переменной input нужно присваивать значение перед циклом и внутри него, так как считывать ввод пользователя придётся и там, и там.
        
        while (input != 0) {  
            input = scanner.nextInt();  
            sum = sum + input;
        }
        System.out.println("Сумма введённых чисел: " + sum);
        //Далее лишний код.
        //if (int input == 0) {
        //    break;
        //}
    }
}
→ Ссылка
Автор решения: MBo
 int sum = 0; // Сумма 
 int input; // Ввод пользователя 
 input = scanner.nextInt(); 
 while (input != 0) {
   sum = sum + input;
   input = scanner.nextInt(); 
 } 
 System.out.println("Сумма введённых чисел: " + sum); }
→ Ссылка
Автор решения: pavel

Например так.

    while ((input = scanner.nextInt()) != 0) {
        sum = sum + input;
    }

Из плюсов - не надо чтение 2 раза писать.

→ Ссылка