Почему этот цикл не работает в Java? - PullRequest
0 голосов
/ 29 мая 2019

У меня есть этот код упражнения для расчета будущего часа:

public static void main(String[]   args) {
Scanner scanner = new Scanner (System.in);
String amPm;
System.out.println("Write an hour (lower o equal to 12) ");
int startHour = scanner.nextInt();
System.out.println("write the number of hours to sum ");
scanner.nextLine();
int hoursToSum = scanner.nextInt();

System.out.println("am or pm? (1/0)");
int selection = scanner.nextInt();

if (selection == 1) {
amPm = ".am";
}
else {
amPm = ".pm";
}

for(int i = 0; i == hoursToSum; i++) {
startHour ++;
if (startHour > 12) {
startHour = 1;
if (amPm.equals(".am")) {
amPm = ".pm";
}
else {
amPm = ".am";
}
}
}
System.out.println("it´s gonna be: " + startHour + amPm);
}

Но это не работает, за исключением значений от 12 до startHour и от 0 до hourToSum.

Я пытался использовать цикл while, и он работал!

Я знаю, что оба цикла for и while могут выполнять одну и ту же задачу. Итак, почему это происходит?

 int i = 0;
while(i < hoursToSum) {
startHour ++;
if (startHour > 12) {
startHour = 1;
if (amPm.equals(".am")) {
amPm = ".pm";
}
else {
amPm = ".am";
}
}
i ++;

}

1 Ответ

2 голосов
/ 29 мая 2019

Чтобы пояснить комментарий Амадана, цикл for состоит из трех частей: 1. Инициализация с объявлением переменной 2. Условие 3. Итерация или изменение состояния в конце цикла

Этивещи происходят и в цикле while, но размещаются по-разному

for (int i = 0; i < 12; i++) {  //(initialization;condition;iteration)
    doStuff();
}

Это инициализирует i в 0, увеличивает его каждый раз, когда код в блоке завершается, и выходит из цикла, если i превышает 12.

int i = 0;       // initialization
while (i < 12) { //condition
    doStuff();
    i++;         //iteration
}

Ошибка в условной части цикла for, где вы проверяете i == hoursToSum вместо i

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...