Задача прошла проверку, но мне не понятно одно место в алгоритме.Подскажите пожалуйста почему задача выходит из цикла while?
Интересует следующий момент
while (!isStopped) {
printTime();,
В функции printTime() нет изменения переменной isStopped на обратное значение. Почему цикл прекращается? Он по сути должен быть вечный.
Денис
35 уровень
Задача прошла проверку, но мне не понятно одно место в алгоритме.Подскажите пожалуйста почему задача выходит из цикла while?
Решен
Комментарии (5)
- популярные
- новые
- старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
Andrey PirogovExpert
10 июня 2020, 18:49
было бы не плохо весь код показать,у меня main так написано:
Clock clock = new Clock("Лондон", 23, 59, 57); //запуск нити (отдельный поток)
Thread.sleep(4000); // поток main ждет 4 сек.
isStopped = true; // присваиваем значение
Thread.sleep(1000); // ждем что бы остальные потоки остановились
0
Денис
10 июня 2020, 20:32
Да конечно приведу весь код
----------
package com.javarush.task.task16.task1613;
/*
Big Ben clock
*/
public class Solution {
public static volatile boolean isStopped = false;
public static void main(String[] args) throws InterruptedException {
Clock clock = new Clock("Лондон", 23, 59, 57);
Thread.sleep(4000);
isStopped = true;
Thread.sleep(1000);
}
public static class Clock extends Thread {
private String cityName;
private int hours;
private int minutes;
private int seconds;
public Clock(String cityName, int hours, int minutes, int seconds) {
this.cityName = cityName;
this.hours = hours;
this.minutes = minutes;
this.seconds = seconds;
start();
}
public void run() {
try {
--->>>>> while (!isStopped) {
printTime();
}
} catch (InterruptedException e) {
}
}
private void printTime() throws InterruptedException {
if (hours == 0 && minutes == 0 && seconds == 0) {
System.out.println(String.format("В г. %s сейчас полночь!", cityName));
} else {
System.out.println(String.format("В г. %s сейчас %d:%d:%d!", cityName, hours, minutes, seconds));
}
this.seconds = seconds+1;
Thread.sleep(1000);
if (seconds>59)
{
minutes = minutes+1;
seconds = 0;
}
if (minutes>59)
{
hours = hours+1;
minutes = 0;
}
if (hours>23)
{
hours = 0;
}
}
}
}
+1
Денис
10 июня 2020, 20:33
для наглядности (легкого поиска) пометил интересующую строку большой продолговатой стрелочкой слева.
0
Andrey PirogovExpert
10 июня 2020, 20:42
ну а так мой коммент ответа не дал?
0
Денис
10 июня 2020, 21:36
Сорян. Все понял. Благодарю)
0