🗒 Задача¶
Скопируй класс из предыдущей задачи и измени его название для избегания конфликтов.
Программа должна заполнять контакты в телефонную книгу (отдельный список объектов).
-
если пользователь не ввел номер телефона, то нужно уведомить об этом пользователя и такая запись не должна добавляться;
-
для приведения введенного номера к числу используй toLongOrNull();
-
если пользователь не заполнил компанию, то в объект записывать null.
Выведи созданные объекты в консоль методом класса.
❌ Ошибки¶
-
контакт, где телефон null – добавляется (не должен)
-
нет проверки на пустоту компании (записывать null)
✏️ Комментарии¶
Есть еще способ сравнения переменных, причем сразу с параметром игнорирования case [https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.text/equals.html]
Для записи `null` в поле компании можно добавить проверку на пустоту с помощью extension функции `isEmpty()`
Если делаем поле нулябельным, значит мы говорим, что "окей тут может быть null"
но нам не подходит такой расклад, потому что контакт без номера телефона бесполезен. кроме того в условии сказано, что такая запись не должна добавляться, поэтому чтобы потом ничего не перепутать, сразу это поле следует сделать обычным
Есть проблема проектирования. ты фильтруешь список без номеров только для вывода.
однако, вернее будет не давать возможности вообще создавать объекты без номеров. это лишняя трата ресурсов, особенно на объемах. иначе можно забить память фейками, а реальных контактов будет лишь несколько процентов
🧾 Решение¶
fun main() {
val phoneBook = mutableListOf<Contact>()
while (true) {
print("Введите имя контакта (или пустую строку для завершения): ")
val name = readln()
if (name.isEmpty()) break
print("Введите номер телефона: ")
val phoneNumber = readln().toLongOrNull()
if (phoneNumber == null) {
println("Неверный формат номера телефона. Контакт не добавлен.")
continue
}
print("Введите компанию (или оставьте пустой для пропуска): ")
val company = readln().let { if (it.isEmpty()) null else it }
phoneBook.add(Contact(name, phoneNumber, company))
}
phoneBook.forEach { it.printInfo() }
}
class Contact(
val name: String,
val phoneNumber: Long,
val company: String?
) {
fun printInfo() {
println("Контакт: Имя - $name, Телефон - $phoneNumber, Компания - ${company ?: "не указана"}")
}
}