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)
}
我最近开始学习使用 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)
}