Проблемы с изменяемыми наборами в Kotlin - PullRequest
0 голосов
/ 29 марта 2020

Я недавно начал учиться программировать в Kotlin. Когда я попытался добавить последовательность чисел в изменяемый набор, используя для l oop, вместо этого добавлялось соответствующее значение 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.

Теперь, как я должен это исправить, чтобы я получил ожидаемый результат в первом коде?

Я еще новичок в этом языке программирования, так что в моем коде также могут быть любые смешные ошибки.

Спасибо за заранее!

1 Ответ

0 голосов
/ 29 марта 2020

Это происходит потому, что n является Char, а метод Char.toInt() возвращает его значение 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)
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...