如何在for循环中正确对应输出姓名与销售额?代码问题修复
问题:运动员姓名与销售额对应输出错误
原代码仅完成了运动员姓名和销售额的录入,但输出逻辑错误,导致姓名与销售额出现笛卡尔积匹配(每个姓名对应所有销售额),需要实现一一对应的输出。
原代码
print("Enter size : ") val athleteSize : Int = readln().toInt() var athleteName = ArrayList<String>() var athleteSale = ArrayList<Int>() println() println("Athlete Names: ") for(i in 1..athleteSize){ print("Enter Athlete $i: ") athleteName.add(readln()) print("Enter sales : ") athleteSale.add(readln().toInt()) println() }
样本输入
Enter size : 2 Athlete Names: Enter Athlete 1: Pacman Enter sales : 100 Enter Athlete 2: Serena Enter sales : 200
当前错误输出
Pacman : 100 Serena : 100 Pacman : 200 Serena : 200
预期输出
Pacman : 100 Serena : 200
修复方案
方案1:修正输出循环(基于原代码结构)
错误输出的核心原因是使用嵌套循环遍历姓名和销售额列表,导致笛卡尔积。只需添加对应索引遍历或zip配对的输出逻辑即可:
方式A:按索引遍历
在录入代码后添加以下输出代码:
// 正确输出一一对应的数据 for (i in athleteName.indices) { println("${athleteName[i]} : ${athleteSale[i]}") }
方式B:使用zip配对
利用Kotlin的zip函数将两个列表的对应元素配对,再遍历输出:
athleteName.zip(athleteSale).forEach { (name, sale) -> println("$name : $sale") }
方案2:使用数据类优化结构(更健壮)
将姓名和销售额封装为一个数据类,从根源上避免两个列表不同步的潜在问题:
// 定义数据类存储运动员信息 data class Athlete(val name: String, val sales: Int) print("Enter size : ") val athleteSize: Int = readln().toInt() val athletes = mutableListOf<Athlete>() println() println("Athlete Names: ") for(i in 1..athleteSize){ print("Enter Athlete $i: ") val name = readln() print("Enter sales : ") val sales = readln().toInt() athletes.add(Athlete(name, sales)) println() } // 输出一一对应的数据 athletes.forEach { println("${it.name} : ${it.sales}") }
这种方式代码可读性和维护性更强,还能避免因列表长度不一致导致的错误。
内容的提问来源于stack exchange,提问作者Kenneth Dagacay
相关产品推荐
相关产品推荐

