JavaRush
Акция
Университет
Java FullStack
Python FullStack
new
Web FullStack
new
Обучение
Курсы
Задачи
Опросы
Игры
Помощь
График пинков
Стажировка
Сообщество
Пользователи
Форум
Чат
Статьи
Истории успеха
Активности
Отзывы
Подписки
Светлая тема
Вопрос
  • Отзывы
  • О нас
  • CS50
Начать
Начать обучение
Начать обучение
  • Все вопросы
JavaRush/Помощь по Java задачам/что не так? почему не работает?
hidden #1870119
8 уровень
  • 29.09.2018
  • 670просмотров
  • 5комментариев

что не так? почему не работает?

Вопрос по задаче Переходим дорогу вслепую
Java Syntax,  4 уровень,  4 лекция
Архивный

Работа светофора для пешеходов запрограммирована следующим образом:
в начале каждого часа в течение трех минут горит зелёный сигнал,
затем в течение одной минуты - жёлтый,
а потом в течение одной минуты - красный,
затем опять зелёный горит три минуты и т. д.
Ввести с клавиатуры вещественное число t, означающее время в минутах, прошедшее с начала очередного часа.
Определить, сигнал какого цвета горит для пешеходов в этот момент.
Результат вывести на экран в следующем виде:
"зелёный" - если горит зелёный цвет,
"жёлтый" - если горит жёлтый цвет,
"красный" - если горит красный цвет.

Пример для числа 2.5:
зелёный

Пример для числа 3:
жёлтый

Пример для числа 4:
красный

Пример для числа 5:
зелёный

Требования:
  • Программа должна считывать вещественное число c клавиатуры.
  • Программа должна выводить текст на экран.
  • Если горит зелёный цвет, необходимо вывести текст: "зелёный"
  • Если горит жёлтый цвет, необходимо вывести текст: "жёлтый"
  • Если горит красный цвет, необходимо вывести текст: "красный"
package com.javarush.task.task04.task0416; /* Переходим дорогу вслепую */ import java.io.*; public class Solution { public static void main(String[] args) throws Exception { BufferedReader rd =new BufferedReader(new InputStreamReader(System.in)); int m; int time; String ts=rd.readLine(); int t=Integer.parseInt(ts); int sec=t*60; if (sec<300){time=sec;} else{m=sec/300; int fivem=300*m; time=sec-fivem;} if (time<180){System.out.println("зелёный");} else {if(time<240 & time>180) {System.out.println("жёлтый");} else{if(time>240 & time<300){System.out.println("красный");} } } } }
0
Комментарии (5)
  • популярные
  • новые
  • старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
Riccio
Уровень 35
Master
1 октября 2018, 08:49
Попробуй так:
public class Solution {
    public static void main(String[] args) throws Exception {
        BufferedReader rd =new BufferedReader(new InputStreamReader(System.in));
        double time = (Double.parseDouble(rd.readLine()))%5;
        if (time >= 0 & time < 3)
            System.out.println("зелёный");
        else
            if (time >= 3 & time < 4)
                System.out.println("жёлтый");
            else
                System.out.println("красный");
    }
}
0
Александр
Уровень 17
30 сентября 2018, 10:40
Привет. Что выдаст твоя программа если ты введёшь 3, 4, 5 или 10?
0
Riccio
Уровень 35
Master
30 сентября 2018, 09:41
Попробуйте упрощать код. Вот это:
BufferedReader rd =new BufferedReader(new InputStreamReader(System.in));

       int m;
       int time;
       String ts=rd.readLine();
       int t=Integer.parseInt(ts);
       int sec=t*60;
Можно переписать так:
BufferedReader rd = new BufferedReader(new InputStreamReader(System.in));
int t = Integer.parseInt(rd.readLine()); // переменная String ts тут лишний шаг
int m, time, sec = t * 60;
Можно вообще все переменные инициализировать в одной строке, тут уж смотрите, как лучше будет читаться. Насчет кода: попробуйте через комментарии описать, что вы хотели сделать в каждой строке. Вообще не проще было введенное число поделить на 5 и отсеять полные циклы переключения светофора, а полученный остаток сравнить и выявить текущее показание.
0
Санек
Уровень 35
Expert
30 сентября 2018, 08:37
int sec=t*60;
if (sec<300){time=sec;}
else{m=sec/300;
int fivem=300*m;
time=sec-fivem;}
if (time<180){System.out.println("зелёный");}
else {if(time<240 & time>180) {System.out.println("жёлтый");}
else{if(time>240 & time<300){System.out.println("красный");}
попробуйте удалить эту часть кода и написать заново используя % вместо умножений и делений P.S. Подсказка: будет лишь 3 проверки логическим оператором if, т.е. 6 строк
0
--------
Уровень 40
Master
29 сентября 2018, 23:40
Считываешь ты число целое, а не вещественное. Зачем его умножать на 60 и сравнивать со значениями, также умноженными на 60 - не особо понятно, но судя по всему, даже по значениям из примеров твой код не выдаст правильных ответов (тестировать-проверять не буду - это ты должен был сделать)
0
Обучение
  • Курсы программирования
  • Регистрация
  • Курс Java
  • Помощь по задачам
  • Цены
Сообщество
  • Пользователи
  • Статьи
  • Форум
  • Чат
  • Истории успеха
  • Активности
Компания
  • О нас
  • Контакты
  • Отзывы
  • FAQ
  • Поддержка
JavaRushJavaRush — это интерактивный онлайн-курс по изучению Java-программирования c нуля. Он содержит 1200 практических задач с проверкой решения в один клик, необходимый минимум теории по основам Java и мотивирующие фишки, которые помогут пройти курс до конца: игры, опросы, интересные проекты и статьи об эффективном обучении и карьере Java‑девелопера.
Подписывайтесь
Язык интерфейса
Русский
English Українська
"Программистами не рождаются" © 2026 JavaRush
MastercardVisa
"Программистами не рождаются" © 2026 JavaRush