🗒 Задача¶
Скопируй класс из предыдущей задачи и измени его название для избегания конфликтов.
-
в этой задаче используй первичный конструктор без выделения памяти под свойства;
-
поля должны быть объявлены и проинициализированы в теле класса;
-
все поля с температурой должны иметь тип 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()
}