package com.javarush.task.task04.task0416;
/*
Переходим дорогу вслепую
*/
import java.util.Scanner;
public class Solution {
public static void main(String[] args) throws Exception {
double t = new Scanner(System.in).nextDouble();
if ((int )t % 4 == 0) {
System.out.println("красный");
} else if ((int)t % 4 == 3) {
System.out.println("жёлтый");
} else {
System.out.println("зелёный");
}
}
}
Artem Maliuga
15 уровень
Даже кастую в int, но валидацию не проходит
Архивный
Комментарии (16)
- популярные
- новые
- старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
Алексей
30 октября 2018, 11:45
Не совсем понял, зачем сначала делать ввод дробного числа, а потом менять его на целое?
Если по условиям ввод дробного, и в примере есть дробное, значит логично работать именно с этим типом.
Необходимо разобрать случаи с дробными промежутками, где 0-2.99 это зеленый, а 3 это уже желтый.
подсказка (<3 - зеленый), (>=3&&<4 - желтый).
0
hidden #1911629
30 октября 2018, 11:50
Потому что в условии прописано, как программа должна отвечать при вводе 2.5. Если поменять на nextInt, то будет брошено исключение и программа свернется.
В условиях проверки валидатора именно это значение и передается в программу.
0
Алексей
30 октября 2018, 11:58
Если я правильно понимаю много не понятных слов, то вы согласны с тем, что это бессмысленное действие, т.к. 2,5 должно пройти проверку и выдать зеленый, а не быть исключением? Вопрос был для автора данного комментария, чтобы он задумался над своими действиями....или я что-то не то сказал?
0
hidden #1911629
30 октября 2018, 12:00
Совсем не то сказал.)
В программе стоит условие, что вывод при вводе 2,5 должен быть зеленый. Если он будет считывать целочисленный тип с ввода, то получит ошибку и завершение программы. Потому он считывает дробный тип с ввода, а потом пытается привести его в целочисленный. Всё верно, кроме способа приведения.
Если простым языком, то когда ты вводишь 2,5 и пытаешься считать оттуда 2, то в строке остается ,5, программа пугается неожиданному результату и выключается. Нужно считать 2,5, потом превратить это внутри кода в 2 и с этим числом уже работать. 0
Алексей
30 октября 2018, 12:28
Все равно не понимаю. В программе нет требования, чтобы число было целочисленным. Мы изначально ввели дробное число, что нам мешает и дальше его использовать, если нам необходимо учитывать 2,5, как отличное от 3?
В своем решении, я прописал код без использования целочисленных и прошел проверку по всем параметрам.
+1
Алексей
30 октября 2018, 12:31
Так, кажется я нашел проблему. Он вводит переменную, которая уже является остатком, а я вводил переменную и искал остаток от ее деления. От сюда весь сыр бор. (в том решении, которое он выдал в конце)
0
hidden #1911629
30 октября 2018, 12:36
Нет требования, но с целочисленными работать проще. Я свой вариант ниже привел.
0
hidden #1911629
30 октября 2018, 11:30
Дело не в касте. Что код выдаст, если я введу 0, например?
Или 7? А если 9 введу?
Даю сразу подсказку. Выводы некорректны ни для одного из перечисленных мною вариантов.
0
Artem Maliuga
30 октября 2018, 11:35
Про 0 нет требований(
писать что-то в стиле if (t > 0 && t<61)??
Я себе рассписал алгоритм и 7 = желтый, а 9 = зеленый, что кажись верно
0
hidden #1911629
30 октября 2018, 11:35
Нет, не верно.
Алгоритм простой. У нас имеется цикл работы сфетофора 5 минут, когда 5 минут проходят, запускается 0 минута нового цикла.
Получается, что 5 = 0, а 6 = 1. 7, следуя логике, будет равно 2, т.е. должно выдавать зеленый.
Ты же сам вводишь дробное число. Если человек вводит 0,5, то следует интерпретировать это как "уже 30 секунд горит зеленый", т.е. 0 является тем моментом, когда включается зеленый, а все значения от 0 до 2,99 являются зелеными.
0
Artem Maliuga
30 октября 2018, 11:43
Добавил еще один иф опираясь на 0
if ((int) t == 0) {
System.out.println("зелёный");}
Здесь либо менять логику с остатком от деления на 5, либо понять что в этом примере не так (если не брать 0 значение), так как остальные данные кастуються в инт и кажись выдают все верно.
Пока понять не могу в чем проблем с конкретно этими остатками от деления
0
hidden #1911629
30 октября 2018, 11:44
С этими остатками от деления проблема в том, что они некорректно интерпретируются. Я дал явную подсказку, что светофор работает по циклу из 5 значений. Почему вы считаете остаток от деления на 4?
0
Artem Maliuga
30 октября 2018, 12:27решение
Спасибо за намеки про цикличность, но честно мне мое решение казалось более красивым и тоже выполняло поставленные условия (не считая нуля правда)
+1
hidden #1911629
30 октября 2018, 12:35решение
+2
Artem Maliuga
30 октября 2018, 12:37
лучше без кастования сделай, так православней будет :D
0
hidden #1911629
30 октября 2018, 12:38
Мы пишем код для людей. Компьютер и так поймёт. Потому нужно сразу привыкать писать всё явно и очевидно.
0