В Java есть много инструментов для чего-то подобного. Они известны как «петли». В Java доступны следующие циклы: while
, do ... while
, for
и for ... each
. Цикл while самый простой. Это выглядит так:
while (condition) {
// Some code
}
В основном, где я помещаю "условие", вы указываете любое логическое значение. Логическое значение - это просто значение, которое может быть либо true
, либо false
, но не более того. В Java вы можете создавать переменные типа boolean
, но часто вы не будете явно создавать логическое значение.
Вместо этого вы будете использовать условные операторы. Например, x < y
, x == y
и x >= y
являются «условными выражениями». Это означает, что в конце они оцениваются как логическое значение. Итак, в этом коде:
int x = 1;
int y = 5;
if (x < y) {
// Code
}
Там, где написано x < y
, на самом деле это оценивается в true
за кадром. Логические значения важны и используются во многих местах в Java.
В любом случае, вернемся к теме циклов, давайте перейдем к следующему циклу, do ... while
. Это выглядит так:
do {
// Code
} while (condition);
do ... while
работает так же, как while
, но всегда запускается хотя бы один раз , даже если условие false
.
for
и for ... each
немного сложнее. Они действительно просто ярлыки. Рассмотрим следующий код:
int i = 0;
while (i < 10) {
System.out.println("I is: " + i);
i++;
}
Здесь цикл будет выполняться 10 раз, а i
будет отслеживать количество циклов. Цикл for
может сделать то же самое, но более кратко:
for (int i = 0; i < 10; i++) {
System.out.println("I is: " + i);
}
Этот код будет делать то же самое, что и первый, но он использует цикл for
. Как видите, цикл for
состоит из трех частей. В первом случае вы можете объявить переменную, во втором - условие, а в третьем - что-то, что выполняется на каждой итерации цикла. for
Циклы часто используются при переборе массивов, но вы, возможно, этого еще не узнали, так что не волнуйтесь.
Цикл for ... each
более сложный, чем все остальные, поэтому, если вы еще не поняли его, не беспокойтесь. По сути, это быстрый способ получить все элементы списка или все, что находится в API коллекций. Например, скажем, у вас есть список строк, вы можете использовать это, чтобы получить все строки в списке:
for (String string : aList) {
System.out.println(string);
}
Это пройдет через каждую строку в списке и выведет ее на печать.
В любом случае, вернемся к проблеме. Здесь нам нужно выбрать цикл, который нужно использовать, и, похоже, лучшим для данной ситуации будет простой цикл while
. Просто сделайте что-то вроде этого:
boolean condition = true;
while (condition) {
// Your code
try {
while (true) { //Creates an infinite loop
in = input.readLine();
if (in.equalsIgnoreCase("y")) {
condition = true;
break;
} else if (in.equalsIgnoreCase("n")) {
condition = false;
break;
} else {
System.out.println("Please enter either Y or N.");
}
}
} catch (IOException e) {
System.out.println("ERROR!");
}
}
Здесь мы используем две while
петли. Первый оборачивает весь код, проверяя логическое значение с именем condition
. Мы инициализировали его как true
, поэтому циклы всегда будут запускаться хотя бы один раз. Во-вторых, я сделал еще один цикл while
. Здесь я сделал while (true)
, который будет работать вечно. Однако вы можете «выйти» из цикла, используя ключевое слово break
. Причина, по которой я это использовал, заключается в том, что у пользователя есть возможность ввести что-то, кроме «y» или «n» В этом случае, он должен просто спросить их снова. Если он получает «Y», он устанавливает condition
в true
и выходит из цикла (что технически не нужно, поскольку условие уже установлено в true
). Если он получает «N», он устанавливает его на false
и выходит из цикла. Поскольку сейчас false
, цикл будет завершен, и программа завершится.