Нельзя объявить новую переменную в цикле while
.
while (boolean always = true) {
} // DOES NOT COMPILE!!!
Вы должны объявить переменную до и вне цикла, так что, возможно, что-то вроде этого:
boolean always = true;
while (always) {
break;
} // compiles fine!
// always is still in scope after the loop!
always = !always;
В этом смысле цикл for
уникален: фактически вы можете объявить новую локальную переменную, область действия которой ограничена этим циклом:
for (boolean always = true; always; ) {
break;
} // compiles fine!
// always is no longer declared after the loop!
always = !always; // DOES NOT COMPILE!
Тем не менее, глядя на то, что вы делаете, вы можете посмотреть на java.util.Scanner
. Я подозреваю, что это будет служить вашим потребностям гораздо лучше.
Пример
Вот пример использования Scanner
для чтения чисел со стандартного ввода, оканчивающихся на 0. Затем он печатает сумму этих чисел. Он корректно обрабатывает некорректный ввод, используя hasNextInt()
вместо Integer.parseInt
/ NumberFormatException
.
Scanner sc = new Scanner(System.in);
System.out.println("Enter numbers (0 to end):");
int sum = 0;
int number;
do {
while (!sc.hasNextInt()) {
System.out.println("I'm sorry, that's not a number! Try again!");
sc.next();
}
number = sc.nextInt();
sum += number;
} while (number != 0);
System.out.println("The sum of those numbers is " + sum);
Вот пример сеанса:
Enter numbers (0 to end):
1
3
-1
five
I'm sorry, that's not a number! Try again!
2
0
The sum of those numbers is 5