Цикл ушёл в минус, как исправить
package lessonThree;
public class HomeWorkThree {
public static void main(String[] args) {
int c = 0;
for (int a = 1; a < 8; a++) {
if (a <= 1) {
System.out.println(" Понедельник ");
} else if (a <= 2) {
System.out.println(" Вторник ");
} else if (a <= 3) {
System.out.println(" Среда ");
} else if (a <= 4) {
System.out.println(" Четверг ");
} else if (a <= 5) {
System.out.println(" Пятница ");
} else if (a <= 6) {
System.out.println(" Суббота ");
} else if (a <= 7) {
System.out.println(" Воскресенье ");
}
for (int b = 1; b < 5; b++) {
if (b <= 1) {
System.out.println(" Ночь ");
} else if (b <= 2) {
System.out.println(" Утро ");
} else if (b <= 3) {
System.out.println(" День ");
} else if (b <= 4) {
System.out.println(" Вечер ");
}
do {
c += 1;
} while (c > 24);
if (c >= 24)
break;
for (int d = 0; d < 60; d++) {
if (d > 60)
break;
System.out.println(" День недели " + a + " Время суток " + b + " Часы " + c + " Минута " + d);
}
}
}
}
}
Цикл начал уходить в минус часах, будьте добры подскажите как исправить.
Ответы (1 шт):
ошибка в том, что слишком много вложенности и крайне проблематично разобраться что там и как, и даже в дебагере такое сложно отловить, так что старайтесь избегать подобного стиля кодирования...
у вас в определённый момент переменная с зацикливается и происходит переполнение, у int фиксированный размер от — 2 147 483 648 до 2,147,483,647 и когда значение в переменной подходит к границе положительных значений оно перескакивает на отрицательное.
byte b = 127;
System.out.println(++b);
вывод будет -128
у вас проблема вот в этом блоке
do {
c += 1;
} while (c > 24);
if (c >= 24) {
break;
}
инкремент и условие выхода в разных блоках. можно попробывать перенести проверку в блок do (но это изменение некоректно делает вывод, проблема большой вложенности)
do {
c += 1;
if (c >= 24)
break;
} while (c > 24);
если вообще убрать блок do вроде работает нормально.
while (c++ > 24);
if (c >= 24)
break;
в идеале этот код надо переписывать, попробуйте заменить блоки if на switch