Kotlin带提示用户输入与类实例化输出实现咨询
Kotlin 学生/教师类实现与用户输入处理
一、修正现有代码的错误
你原来的代码存在几个类型不匹配和构造函数问题,先修正这些基础问题:
streetAddress应该是String类型(地址是文本,不是整数)gpa应该是Double类型(需要支持0.0-4.0的小数取值)Teacher继承Student时,必须传递父类的所有必填参数,这里我们给教师不需要的属性(GPA、Major)设置默认值,更符合实际场景
二、完整代码实现
open class Student( var firstName: String, var lastName: String, var streetAddress: String, var city: String, var state: String, var zip: Int, var gpa: Double, var major: String ) { // 统一打印所有属性的方法 fun printInfo() { println("===== 个人信息 =====") println("FirstName: $firstName") println("LastName: $lastName") println("Street Address: $streetAddress") println("City: $city") println("State: $state") println("Zip: $zip") println("GPA: $gpa") println("Major: $major") println("===================") } } // Teacher继承Student,给GPA和Major设置默认值 class Teacher( firstName: String, lastName: String, streetAddress: String, city: String, state: String, zip: Int, gpa: Double = 0.0, major: String = "N/A" ) : Student(firstName, lastName, streetAddress, city, state, zip, gpa, major) fun main() { // 收集学生信息 println("请输入学生信息:") print("FirstName: ") val studentFirstName = readLine() ?: "" print("LastName: ") val studentLastName = readLine() ?: "" print("Street Address: ") val studentStreet = readLine() ?: "" print("City: ") val studentCity = readLine() ?: "" // 校验State必须是2位字符 var studentState: String do { print("State(请输入2位字符): ") studentState = readLine() ?: "" } while (studentState.length != 2) // 校验Zip是4位整数 var studentZip: Int do { print("Zip(请输入4位整数): ") val zipInput = readLine() ?: "" studentZip = zipInput.toIntOrNull() ?: 0 } while (studentZip !in 1000..9999) // 校验GPA在0.0-4.0之间 var studentGpa: Double do { print("GPA(请输入0.0-4.0之间的小数): ") val gpaInput = readLine() ?: "" studentGpa = gpaInput.toDoubleOrNull() ?: -1.0 } while (studentGpa !in 0.0..4.0) print("Major: ") val studentMajor = readLine() ?: "" // 实例化学生并批量打印信息 val student = Student(studentFirstName, studentLastName, studentStreet, studentCity, studentState, studentZip, studentGpa, studentMajor) println("\n您输入的学生信息如下:") student.printInfo() // 收集教师信息 println("\n请输入教师信息:") print("FirstName: ") val teacherFirstName = readLine() ?: "" print("LastName: ") val teacherLastName = readLine() ?: "" print("Street Address: ") val teacherStreet = readLine() ?: "" print("City: ") val teacherCity = readLine() ?: "" var teacherState: String do { print("State(请输入2位字符): ") teacherState = readLine() ?: "" } while (teacherState.length != 2) var teacherZip: Int do { print("Zip(请输入4位整数): ") val zipInput = readLine() ?: "" teacherZip = zipInput.toIntOrNull() ?: 0 } while (teacherZip !in 1000..9999) // 实例化教师并批量打印信息 val teacher = Teacher(teacherFirstName, teacherLastName, teacherStreet, teacherCity, teacherState, teacherZip) println("\n您输入的教师信息如下:") teacher.printInfo() }
三、关键说明
- 输入校验:针对State、Zip、GPA这些有格式要求的属性,用
do-while循环确保输入符合规则,避免无效数据 - 统一打印:通过
printInfo()方法统一输出格式,减少重复代码,也方便后续修改输出样式 - 空值处理:用
readLine() ?: ""处理用户未输入直接回车的情况,避免空指针异常 - 继承逻辑:Teacher类复用Student的属性和方法,同时通过默认值简化教师实例化的参数传递
内容的提问来源于stack exchange,提问作者Tevin Douglas
相关产品推荐
相关产品推荐

