Kotlin:游程编码

问题描述 投票:0回答:2

该程序有效,但是,我仍然遇到一个逻辑错误:最后一个字母没有通过。例如,当我输入aaaabbbbccccdddd时,我得到的输出是a4b4c4,但没有d4。

fun main () {

    val strUser = readLine()!!.toLowerCase()
    val iLength = strUser!!.length
    var iMatch : Int = 0
    var chrMatch : Char = strUser[0]

    for (i in 0..iLength) {

        if (strUser[i] == chrMatch) {

            iMatch += 1
        }else {
            print("$chrMatch$iMatch")
            chrMatch = strUser[i]
            iMatch = 1

        }


    }


}
kotlin stringindexoutofbounds
2个回答
0
投票

fun main(){

val strUser = readLine()!!.toLowerCase()
var iMatch : Int = 0
var chrMatch : Char = strUser[0]

for (char in strUser+1) {

    if (char == chrMatch) {

        iMatch += 1
    }else {
        print("$chrMatch$iMatch")
        chrMatch = char
        iMatch = 1

    }


}

}


0
投票

[strUser包含按从0iLength - 1的索引的字符,因此您必须写for (i in 0 until iLength)而不是for (i in 0..iLength)

但是Tenfour04完全正确,您可以不带索引就迭代strUser

fun main() {
    val strUser = readLine()!!.toLowerCase()
    var iMatch: Int = 0
    var chrMatch: Char = strUser[0]

    for (char in strUser) {
        if (char == chrMatch) {
            iMatch += 1
        } else {
            print("$chrMatch$iMatch")
            chrMatch = char
            iMatch = 1
        }
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.