Что не так? Когда время достигает 13:00, ваш метод updateDisplay
устанавливает значение отображения часов обратно в 1. Теперь ваш экранный объект часов возвращается в состояние, в котором он находился в 1:00.то есть у вас нет возможности различить эти два раза.
Как исправить? Я предлагаю вам ввести переменную экземпляра (поле) для хранения информации о том, находимся ли мы в AMили PM период дня.Вы можете использовать логическую переменную или ввести enum
с двумя константами, такими как AM
и PM
.Затем вам нужно установить эту переменную в методе timeTick
, а также в вашем методе setTime
.Тогда будет довольно просто использовать эту переменную, чтобы решить, отображать ли строку AM
или PM
в вашем методе updateDisplay
.
Если вас попросят сделать это без добавленияновое поле : тогда вам нужно, чтобы часы на дисплее hours
установились на 23, чтобы вы отслеживали время суток в AM или PM.Поэтому в updateDisplay
не устанавливайте значение часов.Только в сгенерированной отображаемой строке вместо 12 и от 0 до 1 вместо 11 - 23 укажите 12 *.
Для производственного кода: В реальной жизни никто не использовал бы дизайн, подобный вашему, исильно зависит от стандартных библиотечных классов для обработки времени.Можно было бы получить более четкое разделение между моделью (текущее время) и представлением (напечатанная строка).Таким образом, текущее время будет храниться в виде LocalTime
:
private LocalTime time;
Отметьте время на 1 минуту вперед:
time = time.plusMinutes(1);
Для отображения времени вы должны использовать DateTimeFormatter
:
private static final DateTimeFormatter TIME_FORMATTER
= DateTimeFormatter.ofLocalizedTime(FormatStyle.SHORT);
При этом строка отображения создается следующим образом:
displayString = time.format(TIME_FORMATTER);
Код не проверяется, поэтому простите, если есть опечатка.