Java Syntax
4 уровень, 4 лекция
Работа светофора для пешеходов запрограммирована следующим образом:
в начале каждого часа в течение трех минут горит зелёный сигнал,
затем в течение одной минуты - жёлтый,
а потом в течение одной минуты - красный,
затем опять зелёный горит три минуты и т. д.
Ввести с клавиатуры вещественное число t, означающее время в минутах, прошедшее с начала очередного часа.
Определить, сигнал какого цвета горит для пешеходов в этот момент.
Результат вывести на экран в следующем виде:
"зелёный" - если горит зелёный цвет,
"жёлтый" - если горит жёлтый цвет,
"красный" - если горит красный цвет.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class TrafficLights2 {
public static void main(String[] args) throws IOException {
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
String s = reader.readLine();
double a = Double.parseDouble(s);
String color = null;
double countGreen = 0;
double countYellow = 0;
double colorCountRed = 0;
int colorFlag = 1;
for (double i = 0; i <= a; i += 0.1) {
if ((countGreen < 3) & (colorFlag == 1)) {
color = "зеленый";
countGreen += 0.1;
}
else {
countGreen = 0;
colorFlag = 2;
if ((countYellow < 1) & (colorFlag == 2)) {
color = "желтый";
countYellow += 0.1;
} else {
countYellow = 0;
colorFlag = 3;
if ((colorCountRed < 1) & (colorFlag == 3)) {
color = "красный";
colorCountRed+=0.1;
} else {
colorCountRed = 0;
colorFlag = 1;
}
}
}
}
System.out.println(color);
}
}
Или через switch в цикле(тоже результат не попадает в четкие границы...):
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class TrafficLights {
public static void main(String[] args) throws IOException {
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
String s = reader.readLine();
double a = Double.parseDouble(s);
String color = null;
double countGreen = 0;
double countYellow = 0;
double countRed = 0;
int colorFlag = 1;
for (double i = 0; i <= a; i += 0.1) {
switch (colorFlag){
case (1):
if (countGreen < 3) {
color = "зеленый";
countGreen += 0.1;
} else {
countGreen = 0;
colorFlag = 2;
a += 0.1;
}
break;
case (2):
if (countYellow < 1) {
color = "желтый";
countYellow += 0.1;
} else {
countYellow = 0;
colorFlag = 3;
a += 0.1;
}
break;
case (3):
if (countRed < 1) {
color = "красный";
countRed += 0.1;
} else {
countRed = 0;
colorFlag = 1;
a += 0.1;
}
break;
}
}
System.out.println(color);
}
}
Oleg Chilikin
24 уровень
Из- за чего нет попадания в интервалы цветов? логика должна быть правильной...
Обсуждается
Комментарии (4)
- популярные
- новые
- старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
Роман
17 мая 2020, 17:12
Чет сложно как-то все. Вы учитывали если вдруг введут больше 5-ти?
Делается проще. Вводим время. С помощью оператора % выделяем пятиминутку, и затем тремя простыми условиями выводим нужный цвет.
0
Oleg Chilikin QA Automation Engineer
17 мая 2020, 18:06
Как через целочисленное деление решить я знаю, написал за 5 минут, проверку прошел, но я решил по другому посмотреть на решение, здесь не так все сложно:
В первом варианте счетчик зеленого цвета идет параллельно со счетчиком цикла до конечного значения, введенного пользователем, если число меньше трех минут присваевается конечный цвет Зеленый, если больше 3х минут, срабатывает условие изменение флага цвета на 2, а счетчик зеленого цвета обнуляется, и запускается 2ое условие, в котором так же счетчик желтого цвета идет параллельно со счетчиком цикла, и при достижении конечного значения присваевается конечное значение цвета Желтый, если и после минуты время, введенное пользователем, не заканчивается срабатывает условие изменение флага цвета на 3, а счетчик желтого цвета обнуляется, и запускается 3е условие, в котором так же счетчик красного цвета идет параллельно со счетчиком цикла, опять же, если конечное значение больше и проходит минута работы 3его условия, флаг цвета меняется на 1, а счетчик красного цвета обнуляется, и начинает опять работать первое условие и счетчик зеленого цвета, как то так...
По логике, программа, рассчитана на любое значение времени с начала часа.
0
Oleg Chilikin QA Automation Engineer
17 мая 2020, 18:12
И как вариант, думал проще реализация получится, использовал внутри цикла switch, логика та же, что у блока с условиями, только при выполнении else блока case (ФлагЦвета1) переменная ФлагЦвета меняется на 2 и уходит на дополнительный круг, для того, чтобы при следующем проходе уйти на блок case (ФлагЦвета2)
0
Роман
17 мая 2020, 18:51
У меня под вечер голова не варит, сам бы не разобрался))
+1