Stopwatch (Секундомер)

  • 9
  • Недоступна
Реализуйте логику метода doStep так, чтобы учитывалась скорость бегуна. Метод getSpeed() в классе Runner показывает, сколько шагов в секунду делает бегун. Нужно, чтобы бегун действительно делал заданное количество шагов в секунду. Если Иванов делает 4 шага в секунду, то за 2 секунды он сделает 8 шагов. Если Петров делает 2 шага в секунду, то за 2 секунды он сделает 4 шага.
Вы не можете решать эту задачу, т.к. не залогинены.
Комментарии (253)
  • популярные
  • новые
  • старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
Андрей Захаренков
Уровень 18, Санкт-Петербург
19 июля, 17:03
короче задачка на математику через if...else не делайте нужен универсальный подход для всех бегунов: просто усыпите поток на (1000 мс деленных на скорость бегуна)
Maksym QA Automation Engineer
3 июля, 07:24
Мдя, решение примитивное, но я не понимал из условия какой вывод требуется. Валидатор показал.
Артур
Уровень 17, Москва
8 июня, 20:47
Мне потребовалось много времени просто чтобы осознать эту задачу
Евгений
Уровень 23, Омск, Россия
30 мая, 11:17
Решал через if() и сравнивал имена переданных объектов, в соответствии усыплял поток Thread.sleep(), валидатор отказал, хотя все работало правильно Решение в одну строчку, усыплять поток в зависимости от скорости (1000 / объект.getSpeed()) решение принято.
Aleks
Уровень 18, Москва, Россия
25 марта, 13:50
Допустил ошибку, количество шагов может спокойно меняться. Нужно сделать код, который будет подходить любому кол-ву шагов бегунов.
Маргарита
Уровень 22, Москва
17 марта, 16:42
Подскажите, пожалуйста в doStep() у меня есть вот такое:
double delay = 1.0 / owner.speed * 1000;
При этом поле speed класса Runner является private, однако я спокойно я могу достучаться до него в другом классе и при желании изменить его. Почему так происходит?
Ivan Fedorov
Уровень 19
31 марта, 12:07
Тоже не понял. Решил так
Thread.sleep(1000/ owner.speed)
Валидатор принял. Посмотрел правильное решение - там через геттер.... И тут я задумался, а почему у меня то работает ??? у Ruuner же speed private
Maks Panteleev
Уровень 39, Москва, Россия
2 апреля, 16:59
Работает у тебя потому что ты вызываешь метод из класса Stopwatch, который вызывает не спид из класса раннера, а поле owner класса Stopwatch.
public static class Stopwatch extends Thread {
    private Runner owner;
    private int stepNumber;

    public Stopwatch(Runner runner) {
        this.owner = runner;
    }
Вот тут у тебя в конструкторе объект раннера присвается полю owner. А у раннера есть свою поле спид. Получается, что переменная оунер, которая находится в классе стопвоч, ссылается на объект класса раннер у которого есть поле спид. Если ты попробуешь поле спид из метода взывать напрямую - то нихрена у тебя не выйдет. А геттер тут используется просто чтоб показать как правильно, потому что в большинстве случаев такой трюк не прокатит)
Anna
Уровень 23
11 марта, 18:51
Это же надо так непонятно написать, что от нас хотят! Пример только сбивает с толку. Время отставания (время "сна") бегуна зависит от его скорости.
ASY
Уровень 17
7 марта, 18:46
Кто не будет подскажет, почему данная реализация метода doSleep() не работает:
public void doStep() throws InterruptedException {
	stepNumber ++;
	long sleepTime = owner.getSpeed() == 4 ? 250 : 500;
	Thred.sleep(sleepTime);
	System.out.println(owner.getName() + " делает шаг №" + stepNumber + "!");
}
Dmitry Panchenko
Уровень 24, Москва, Россия
9 марта, 08:52
Скорее всего из-за жесткой привязки к скорости, наверное валидатор проверяет с разными параметрами вызова конструктора. Да и в любом случае, лучше стараться делать гибкий код!!!
Aleks
Уровень 18, Москва, Россия
25 марта, 13:38
код выполняется верно, если бегуны бегут только с этими заданными скоростями. А что будет если бегуны будут бежать с другими скоростями?)))
Anonymous #2297535
Уровень 22, Северодвинск, Россия
12 февраля, 20:39
ВАЖНО! Используй метод Thread.sleep(), а не Stopwatch.sleep().
Может кто-нибудь объяснить почему нельзя использовать Stopwatch.sleep()? Результат одинаковый получается.
VasliyD
Уровень 22, Москва
26 февраля, 12:44
Тоже вопрос возник. Ответа не придумал )
мистер т
Уровень 35, Москва
11 февраля, 22:57
Можно ли использовать sleep вместо Thread.sleep? Не в этой задаче (валидатор не пропускает), а вообще.
Евгений
Уровень 17, Смоленск, Россия
11 июля, 04:00
Использовал просто sleep вместо Thread.sleep валидатор не пропустил, хотя в других задачах на использование просто sleep он не ругался, это видимо связано с жестким требованием в условии: "ВАЖНО! Используй метод Thread.sleep(), а не Stopwatch.sleep()."