You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.28 23:17:09