Всем привет, написал код, вроде все работает, но , когда 0,2 ввести пишет зелёный и красный. Так и не понял почему так происходит и вообще последние три пункта не проходит((
public class Solution {
public static void main(String[] args) throws Exception {
Scanner in = new Scanner(System.in);
double s = in.nextDouble();
int z = 1;
int x = 3 ;
int y = 4 ;
int w = 5;
if(s>=0&&s<1){
System.out.println("зелёный");
}
while (true) {
if (s >= z && s < x) {
System.out.println("зелёный");
break;
}
if(s>=x&& s<y){
System.out.println("жёлтый");
break;
}
if(s>=y&&s<w){
System.out.println("красный");
break;
}
x+= 4;
z += 4;
y += 4;
w +=4;
}
}}
Vladimir
10 уровень
Код работает, но что то пошло не так
Решен
Комментарии (10)
- популярные
- новые
- старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
Vladimir
25 марта 2020, 17:10
Все получилось, спасибо за помощь, поправил значения, z от 0 и вместо 4 пятерку надо прибавлять, ошибка так сказать математическая, а я уж думал с циклом не так что то делаю.
0
Vladimir
25 марта 2020, 16:17
Об этом я не подумал, спасибо большое, буду разбираться дальше
0
Vladimir
25 марта 2020, 10:53
еще такой момент в конце принта ставлю бреак, иначе он постоянно его пишет, не пойму почему, ведь в другой интерации число не подходит в интервал, по идее он один раз должен печатать
0
Ksenia Volkova Java Developer в DXC Master
25 марта 2020, 11:39
У тебя же цикл бесконечный - while (true) - поэтому если ты его не прервешь, то программа никогда не завершится.
А строки выводятся, потому что рано или поздно твой счетчики (x, y, z, w) достигают максимально возможного для int значения, и происходит как бы "перехлёст".
Если мы к максимальному значению прибавим 1 - получим минимально возможное значение:
Это свзано с тем, как компьютер хранит и оперирует числами.
И, соответственно, в какой-то момент один из if-ов сработает снова. +1
Vladimir
25 марта 2020, 10:09
Согласен, что то совсем уже запутался, тогда там изменится значение прибавление. Вообще цикл идет от 0 до 60 изначально, потом поставил true, на случай если больше 60 минут вводить. Вообще через цикл решать таким образом, это правильный подход?
0
Ksenia Volkova Java Developer в DXC Master
25 марта 2020, 10:14
Есть более эффектиный способ решения, но с циклом тоже можно сделать рабочий вариант. Просто нужно правильно задать интервалы.
То, что убрал ограничение в 60 минут - это правильно.
+1
Vladimir
25 марта 2020, 09:28
проверка от 0 , чтобы условие проходило , если ввести 0.5 минут например.
0
Vladimir
25 марта 2020, 09:27
получется, что зелёный горит. 0, до 3, 5 до 7, 9 до 11 и т.д
желтый горит 3 до 4, 7 до 8, 11 до 12 и т.д
красный от 4 до 5, 8 до 9, 12 до 13 и т.д, по 4 прибавляем каждый раз.
0
Ksenia Volkova Java Developer в DXC Master
25 марта 2020, 09:40
Интересно, почему это зеленый горит с 5 до 7, если сказано, что он горит 3 минуты?
+1
Ksenia Volkova Java Developer в DXC Master
25 марта 2020, 08:11
Зачем нужна отдельная проверка для числа от 0 до 1?
Почему увеличиваешь переменные на 4? Сколько длится цикл работы светофора?
+1