KOTLIN - For 循环参数不支持函数 - 寻找替代方案

KOTLIN - For loop argument is not support function - Looking for alternatives

下面的代码用于计算考试成绩。 5 主题名称和从这些主题收到的 5 点被用户记录在空的 arrays 中。

我这里的都解决了。但是我想在 "cycle" 之后添加 "th" "st" "rd" "nd"。其中写着“请键入课程”“请键入点”

例如: “请输入 1st 点”

但是使用我的代码我可以: "请输入 1 点"

我试图用 "When" 条件执行这个过程,但我不能,因为循环参数 "cycle" 不支持 last() 函数

例如:

    when (cycle.last()) {
    1 ->  "st"
    2 -> "nd"
}

如果有效,它会给我一个结果11st, 531st, 22nd, 232nd, 等。这就是我想要的

fun main() {

var subject = Array<String>(5){""}
var point = Array<Int>(5){0}


for (cycle in 0 until subject.count()) {

    println("Please type ${cycle+1} lesson")
    var typeLesson = readLine()!!.toString()
    subject[cycle] = typeLesson

    println("Please type ${cycle+1} point")
    var typePoint = readLine()!!.toInt()
    point[cycle] = typePoint
}


var sum = 0
for (cycle in 0 until point.count()) {
    println("${subject[cycle]} : ${point[cycle]}")

    sum = sum + point[cycle]/point.count()
}

println("Average point: $sum")

}

您可以将数字除以 10,然后使用 % 求余数。那是最后一位。

fun Int.withOrdinalSuffix(): String =
    when (this % 10) {
        1 -> "${this}st"
        2 -> "${this}nd"
        3 -> "${this}rd"
        else -> "${this}th"
    }

用法:

println("Please type ${(cycle+1).withOrdinalSuffix()} lesson")

请注意,在英语中,11、12、13 有后缀“th”,因此您可能想这样做:

fun Int.withOrdinalSuffix(): String =
    if ((this % 100) in (11..13)) { // check last *two* digits first
        "${this}th"
    } else {
        when (this % 10) {
            1 -> "${this}st"
            2 -> "${this}nd"
            3 -> "${this}rd"
            else -> "${this}th"
        }
    }

相反。