package com.javarush.task.task04.task0416;
/*
Переходим дорогу вслепую
*/
import java.io.*;
import java.util.*;
public class Solution {
public static void main(String[] args) throws Exception {
InputStream inputStream = System.in;
Reader inputStreamReader = new InputStreamReader(inputStream);
BufferedReader bufferedReader = new BufferedReader(inputStreamReader);
String min = bufferedReader.readLine(); //читаем строку с клавиатуры
float imin = Float.parseFloat(min); //преобразовываем строку в число.
int i = (int) imin; //отбрасываем цифры после запятой
String gr = "зелёный";
String ye = "жёлтый";
String rd = "красный";
String l = "";
int ii = i % 10;
if ((i < 0)&&(i >= 60)){
System.out.println("Введены не верные данные");
}
else{
if ( (ii >= 0 || ii <= 2)&&(ii >= 5 || ii <= 7)){
l = gr;
}
else {
if ((ii == 3 )&&(ii == 8)){
l = ye;
}
else {
if((ii == 4)&&(ii == 9)){
l = rd;
}
}
}
}
System.out.println(l);
}
}
Роман
10 уровень
помогите! что я опять делаю не так?
Архивный
Комментарии (9)
- популярные
- новые
- старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
nemerof
29 ноября 2019, 13:34
ii == 3 && ii == 8
ii == 4 && ii == 9 эти условия всегда false, ii не может одновременно быть и 4 и 9.
А вообще нужно перепродумать логику всей задачи заново, также советую переменные называть более читаемыми именами, чем i, ii, l
0
Роман
29 ноября 2019, 13:37
спасибо. Но всеравно не ясно, мне то кажется что логика железная((( так должно быть? ii == 3 || ii == 8
0
Роман
29 ноября 2019, 13:41
наверное надотрассмотреть до 5 и тогда не будет вообще этого условия моего
0
hidden #598481
29 ноября 2019, 13:53
Код должен работать с любыми числами, не до 5, не до 10, не до 60, а с любыми. Чтобы я мог ввести "1234.56" и узнать результат.
И используй double вместо float
0
Роман
29 ноября 2019, 14:38
написано в задании с каждого нового часа. значит от 0 до 59.99999999 можно вводить, я не прав?
0
Роман
29 ноября 2019, 14:47
какая разница дабл или флот? ечли мы тут же его переводим в инт? так как то что послеьзапятой тут роли никакой не играет?
0
Роман
29 ноября 2019, 15:35
вообще в задаче ясно сказано "с начала каждого часа" Видимо я не понял задания. потому что мне кажется вводимое число ограничивается 60 минутами. И почему дабл, а на флот? Свою функцию он тут вроде выполняет, как разница если после него я все равно начинаю работать только с целыми числами?
0
hidden #598481
29 ноября 2019, 17:00
Неважно, с какими числами работаешь ты, важно, какие требования предъявлены заданием к функционалу программы, а требуется работать с вещественными. Про флоат можешь забыть, он тебе с вероятность 99% вообще не пригодится, как и тип short. Ты ведь даже для индексов в циклах ведь используешь int, хотя теоретически подошёл бы и short? Все дело в том, что double и int де-факто являются стандартом для использования в целочисленном и соответственно дробном исчислении. Шот и флот нужны для тех редких случаев, когда малые объемы используемой памяти приоритетней точности вычислений, и из-за этой малой точности флот тут не пройдет тестирование даже при верной логике.
"С начала часа" в этой задаче мне самому не нравится, лучше бы конечно сформулировали "с начала отсчёта". Но справедливости ради оптимальному алгоритму все равно, сколько времени пройдет. Главное понять, что для решения задачи не нужно разбирать каждый цикл светофора, достаточно разобрать первый, а потом привести число к тому, в какую фазу оно попадет в этом цикле.
+1
Роман
5 декабря 2019, 13:28
Про типы данных понял. Причем, недавно еще смотрел видос Экстрим Кодинг, там на эту тему говорили, что в мире не любят этих "оптимизаторов", что мол в наше время гнаться с этими байтами, может выйти боком, при последующем рефакторинге кода. Чтобы коллеги в будущем не страдали и не тратили время на лишние манипуляции. Так что эту тему твердно уяснил. Спасибо.
Что по поводу часа, я эту задачу показал жене, она вообще не ИТшник, с ходу сказала, что надо брать только отрезок от 0 до 60. Хотя я вот думаю, что все логично. С начала каждого часа (вообще любого часа) может пройти вообще любое количество минут потому тут и 1230033 должно быть можно ввести.
0