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

🗒 Задача

Скопируй класс из предыдущей задачи и измени его название для избегания конфликтов.

  • в этой задаче используй первичный конструктор без выделения памяти под свойства;

  • поля должны быть объявлены и проинициализированы в теле класса;

  • все поля с температурой должны иметь тип Int;

  • программа не должна иметь других функций, кроме метода вывода информации о погоде.

В конструктор передается температура в Кельвинах. При обращении к полям с температурой возвращаются данные в Цельсиях.

Cоздай объект с произвольными данными и выведи в консоль методом созданного класса.

❌ Ошибки

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

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

Тут повнимательнее в ТЗ – первичный конструктор использовать нужно. Но не выделяя память (то есть без использования val)
Поля объявлены в теле класса – все верно (через val). Но проинициализированы они должны переменными из основного конструктора. Сами значения, как принято делать в большинстве случаев, передаем при создании объекта.
В конструктор передается температура в Кельвинах. При обращении к полям с температурой возвращаются данные в Цельсиях.

Ты переводишь температуру непосредственно при выводе. Хотя в ТЗ прописано что передается и что возвращается. При обращении к полям – это значит, что уже в поле должно храниться измененное значение. И эту трансформацию нужно делать в классе при инициализации свойства в теле класса.

Кроме того тут используются повторяющиеся магические числа, что уже проходили и выглядит не очень хорошо)
Если основной конструктор пустой, то круглые скобки можно опустить

🧾 Решение

class WeatherInfo(kelvinDayTemperature: Int, kelvinNightTemperature: Int) {
    private val kelvinToCelsiusOffset = 273.15 // может быть константой

    val dayTemperature: Int = kelvinDayTemperature - kelvinToCelsiusOffset.toInt()
    val nightTemperature: Int = kelvinNightTemperature - kelvinToCelsiusOffset.toInt()
    val hasPrecipitation: Boolean = false

    fun displayWeatherInfo() {
        println("Дневная температура: $dayTemperature°C")
        println("Ночная температура: $nightTemperature°C")
        println("Наличие осадков: ${if (hasPrecipitation) "Да" else "Нет"}")
    }
}

fun main() {
    val weatherToday = WeatherInfo(300, 290) // 26.85°C и 16.85°C соответственно
    weatherToday.displayWeatherInfo()
}