Kotlin 中可变集的问题

Problems with mutable sets in Kotlin

我最近开始学习使用 Kotlin 编程。当我尝试使用 for 循环将数字序列添加到可变集时,相应的 ASCII 值被添加。

fun main(args: Array<String>) {
  var userInput = readLine() //The input was 12345
  var set = mutableSetOf<Int>()
  for(n in userInput.orEmpty()){
    var numN = n.toInt()
    set.add(numN)
  }
  println(set)
}
// The output is [49, 50, 51, 52, 53], whereas I expected [1, 2, 3, 4, 5]

起初我推测问题出在 .toInt() 函数上,所以我尝试了这个:

fun main(args: Array<String>) {
  var x = "2"
  println(x.toInt())
}
//The output is 2

但输出如预期的那样,是数字本身,而不是相应的 ASCII 版本。

现在我应该如何解决这个问题,以便在第一个代码中得到预期的结果?

我还是这门编程语言的新手,所以我的代码中也可能存在任何可笑的错误。

提前致谢!

发生这种情况是因为 n 是一个 Char 并且方法 Char.toInt() returns 它的 ASCII 值。

为避免这种情况,您应该将 Char 转换为 String,然后使用 String.toInt()(就像您在示例中使用值 "2" 所做的那样) .

fun main(args: Array<String>) {
    var userInput = readLine() //The input was 12345
    var set = mutableSetOf<Int>()
    for(n in userInput.orEmpty()){
        var numN = n.toString().toInt()
        set.add(numN)
    }
    println(set)
}

顺便说一句,您使用更少的代码获得了相同的结果:

fun main(args: Array<String>) {
    var userInput = readLine() //The input was 12345
    // 1. Converts the string to an array of char
    // 2. Transforms each char into its number value
    // 3. Converts the result list in a set
    val set = userInput.orEmpty().toCharArray().map(Character::getNumericValue).toSet()
    println(set)
}