Big Ben clock

  • 9
  • Недоступна
"В Лондоне полночь", — говорит дядюшка Бэн. Заставьте его говорить программно. Разберись, что делает программа и реализуйте логику метода printTime так, чтобы каждую секунду выдавалось время начиная с установленного в конструкторе.
Вы не можете решать эту задачу, т.к. не залогинены.
Комментарии (244)
  • популярные
  • новые
  • старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
Anonymous #2931973
Уровень 22
31 мая, 19:37
А зачем используется второй "Thread.sleep(1000);" с параметром 1000 в мэйне:
....
public static void main(String[] args) throws InterruptedException {
        Clock clock = new Clock("Лондон", 23, 59, 57);
        Thread.sleep(4000);
        isStopped = true;
        Thread.sleep(1000);
    }
...
Первый "Thread.sleep(4000);" с параметром 4000 понятно зачем - остановить главную нить, чтобы дочерняя нить успела поработать, до смены переменной "isStopped". Это собственно описал Luerox ниже.
Kamil zaripov
Уровень 27
24 мая, 16:50
1. Программа работает в течении 4 секунд 2. Необходимо сделать корректный вывод часов, минут и секунд 3. Усыплять программу на 1 секунду после вывода времени
xxxx
Уровень 16
29 мая, 10:30
усыплять надо ДО вывода времени
Sun
Уровень 30
17 января, 10:02
Моё математическое решение без if. Но решение с использованием LocalTime из комментов больше понравилось )
hours = (hours + (minutes + (seconds+1)/60)/60)%24;
            minutes = (minutes + (seconds+1)/60)%60;
            seconds = (seconds + 1)%60;
            sleep(1000);
Liubov
Уровень 35
16 декабря 2022, 12:23
Кмк, лучше доверить подсчет часов уже имеющемуся специалисту по счету часов, а не изобретать заново. Завтра на Марс переедем, там длина суток другая, и что, переписывать все?) Thread.sleep(1000); LocalDateTime a = LocalDateTime.of(1, 1, 1, hours, minutes, seconds); a = a.plusSeconds(1); hours = a.getHour(); minutes = a.getMinute(); seconds = a.getSecond();
SVCH
Уровень 41
27 декабря 2022, 10:44
Еще лучше использовать LocalTime, нам же дата не нужна:
Thread.sleep(1000);
LocalTime time = LocalTime.of(hours, minutes, seconds).plusSeconds(1);
Anon
Уровень 22
5 февраля, 16:47
Ну... Если уж душнить, то по-полной! Во-первых, использовать в данной задаче LocalDateTime - избыточно. Достаточно LocalTime. Во-вторых, ваше же решение на Марсе как раз-таки и будет нерабочим из-за разной длительности Земных суток и Марсианских солов. Ибо оф. документация нам говорит, что максимальные значения, с которыми может работать класс - это 23 для часов, 59 для минут и 59 для секунд. Придётся переписывать всё.
xxxx
Уровень 16
29 мая, 10:46
Если использовать LocalTime с прибавкой секунды, как у SVCH, то придется менять конструктор - в нем проставлены int-ы, необходимо будет прописывать, чтобы в конструтор вместо наших int проставлялись данные из LocalTime.
Leon JlEOH
Уровень 32
11 ноября 2022, 05:05
мне цифровые часы как в решении не нравятся хотя там откровенно логика программиста) мне механика приятнее ... будто стрелочка за стрелочку цепляет
Thread.sleep(1000);
if (seconds != 59) seconds++;
else {
     seconds = 0;
     if (minutes != 59) minutes++;
     else {
           minutes = 0;
           if (hours != 23) hours++;
           else hours = 0;
     }
}
Lafaed
Уровень 36
28 декабря 2022, 13:08
Я сделал похожее но немножко не похожее : //add your code here - добавь код тут Thread.sleep(1000); if (++seconds == 60) { seconds = 0; if (++minutes == 60) { minutes = 0; hours = ++hours == 24 ? 0 : hours; } }
Lafaed
Уровень 36
28 декабря 2022, 13:15
и подскажите как вы красивый код вставляете "картинкой" а не просто текст как у меня ?
Leon JlEOH
Уровень 32
28 декабря 2022, 15:36
marych
Уровень 51
31 декабря 2022, 07:25
Спасибо
Tomhetted
Уровень 39
7 ноября 2022, 14:13
Хорошая задачка, хоть и не сложная
5 ноября 2022, 14:37
Очень странно, сначала решил через проверку секунду, минут и часов на макс значение, все в консоли работало, но валидатор не принимал. Прочел в условии "Секунд, после инкремента времени, не может быть больше 59. Должно увеличиться количество минут." Подумал, логично что не принимает. Пошел другим путем:
if (hours == 23 && minutes == 59 && seconds == 59) {
                Thread.sleep(1000);
                hours = 0;
                minutes = 0;
                seconds = 0;
            } else if (minutes == 59 && seconds == 59) {
                Thread.sleep(1000);
                hours++;
                minutes = 0;
                seconds = 0; //ну и так далее
Потом глянул готовое решение и был обескуражен
Даниил
Уровень 19
31 октября 2022, 17:53
Решил схитрить и сделать так
Thread.sleep(1000);
                seconds++;
                if (seconds == 60){
                    seconds = 0;
                    minutes = 0;
                    hours = 0;
                }
Вроде бы выводит в консоль нужный результат, но условие не выполняется в полной мере и логика будет нарушена при достижении минутами 60 и далее
Lafaed
Уровень 36
28 декабря 2022, 13:13
предположим время 21:59:59 секунда++ ииии получаем не 22:00:00 а 00:00:00
Dmitry Aytiev
Уровень 28
11 октября 2022, 12:36
Задачу решил, но неоч разобрался почему часы не идут дальше 0:0:1. Подскажите где в программе происходит остановка.
Luerox
Уровень 35
25 октября 2022, 07:44
Остановка в методе main + в методе run объекта Clock. Сначала основная нить (main) засыпает на 4 секунды, как раз в это время тикают часы. Потом основная нить «просыпается» и меняет значение isStopped. Соответственно, следующий цикл в методе run дочерней нити не запускается, т.к. он зависит от этого значения, часы дальше не считают.
29 сентября 2022, 11:47
Решил один в один как в авторском решении, только сперва "усыплял", а потом проверял. Валик принял, разницы в логике никакой нет.