Перейти к содержанию

🗒 Задача

Сайт с расписанием поездов получает данные с сервера. Сервер посылает время выезда и время в пути, а время прибытия вычисляется из них. Сервер прислал данные, что поезд выехал в 9:39 и будет в пути 457 минут.

– Создай целочисленные переменные и проинициализируй их этими данными; – Напиши программу, которая обработает данные и подсчитает час и минуту прибытия поезда; – Выведи результат в консоль.

❌ Ошибки

  • много повторений числа 60 в коде — предлагать вынести в константу и говорить про магическое число

  • не обрабатывается кейс, если минут больше 60 или 120

  • не объявляют изначально переменные для времени старта и времени в пути – говорить про магические числа

✏️ Комментарии

Работает, отлично. Но давай сделаем код более чистым и без использования `if else`. Надо изменить подход – сначала вычисли общее количество минут, затем с помощью деления вычисли часы, затем с помощью операции остатка от деления вычисли оставшиеся минуты. 
Все окей, но сейчас значения в строке захардкожены. Такую программу сложно модифицировать, ведь мы предполагаем, что переменные инициализируются динамически разными значениями. Следует проинициализировать значения из ТЗ по отдельности.

Иными словами это [магические числ](https://ru.wikipedia.org/wiki/%D0%9C%D0%B0%D0%B3%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%BE%D0%B5_%D1%87%D0%B8%D1%81%D0%BB%D0%BE_(%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5)#%D0%9F%D0%BB%D0%BE%D1%85%D0%B0%D1%8F_%D0%BF%D1%80%D0%B0%D0%BA%D1%82%D0%B8%D0%BA%D0%B0_%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D1%8F)а, что не является хорошей практикой.
Также обращаю внимание, что все арифметические знаки обосабливаются пробелами.
Все окей, но чтобы снизить риск ошибок, предлагаю еще вынести 60 в константу. Кроме того это [магическое число](https://ru.wikipedia.org/wiki/%D0%9C%D0%B0%D0%B3%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%BE%D0%B5_%D1%87%D0%B8%D1%81%D0%BB%D0%BE_(%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5)#%D0%9F%D0%BB%D0%BE%D1%85%D0%B0%D1%8F_%D0%BF%D1%80%D0%B0%D0%BA%D1%82%D0%B8%D0%BA%D0%B0_%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D1%8F), что тоже не является хорошей практикой.
чтобы не писать нагруженных условий, рекомендую применить форматирование строк через String.format
В целом не корректное решение.
Переведи 9:39 в минуты от начала дня
Прибавь минуты на дорогу
Переведи результат обратно во время
все хорошо. но чем обусловлен изменяемый тип этой переменной? разве она перезаписывается где-то?)
проинициализируй отдельными переменными часы, минуты и время в пути по условию. затем используй эти переменные в коде при расчетах)
Константы именуются в отличном от обычных переменных стиле и название лучше делать какое-то осмысленное. Что-то вроде "минуты в часе".
Стиль написания констант отличен от стиля классических переменных.
Время хоть и выводится в формате [час:минуты], но не форматируется для двузначного представления минут и часов, попробуй посмотреть в сторону String.format

🧾 Решение

val MINUTES_IN_HOUR = 60

fun main() {
    val hourOfDeparture = 9
    val minuteOfDeparture = 39
    val timeTravelInMinutes = 457
    val hourInTravel = timeTravelInMinutes / MINUTES_IN_HOUR
    val minuteInTravel = timeTravelInMinutes % MINUTES_IN_HOUR

    val allminuteOfArrival = minuteOfDeparture + minuteInTravel
    val remainderHourArrival = allminuteOfArrival / MINUTES_IN_HOUR
    val minuteOfArrival = allminuteOfArrival % MINUTES_IN_HOUR
    val hourOfArrival = hourOfDeparture + hourInTravel + remainderHourArrival

    println(String.format("%02d:%02d", hourOfArrival, minuteOfArrival))
}