Ваша проблема не в самом массиве, а, вероятно, в том, что вы ожидали от вызовов Scanner
. (Обратите внимание, что Scanner
- это AutoClosable
, поэтому вы можете использовать use
, например, Scanner(System.in).use { /* your code here */ }
.)
Прежде всего, вы используете Scanner.nextInt()
. Это означает, что если вы не введете номер первым, вы получите InputMismatchException
.
Так что число обязательно. Если вы вводите только номер, например, 1
вы получите ваш ArrayIndexOutOfBoundsException
. Причина этого заключается в следующем: сканер в основном читает 1\n
, если вы нажимаете ввод после номера.
Теперь nextInt()
извлекает номер, а \n
остается. Scanner.hasNextLine()
, следовательно, true
, потому что у него все еще есть конец строки. Scanner.nextLine()
затем читает ваш ввод до первой новой строки, которая теперь в основном является пустой строкой.
Так что, может быть, вы уже хотите использовать первую новую строку после nextInt()
, т.е. вызывать read.nextLine()
сразу после nextInt()
, в основном отбрасывая все, что следует за вашим номером.
Из-за вашего комментария относительно того, что вы на самом деле хотите, а именно: «Я просто хочу знать, как воспринимать входные данные как массив», теперь я скорее сконцентрируюсь на этом.
Вы можете позвонить toCharArray()
на любой String
. При этом ниже приведен упрощенный вариант кода, который читает String
из консоли и сортирует его по целочисленному представлению:
readLine()!! // yes... we know that we enter something valuable here ;-)
.toCharArray()
.sortedBy(Char::toInt) // well... actually .sorted() should suffice as well
.joinToString("")
Вот и все. Это все, что вам нужно, чтобы получить массив символов из String
и отсортировать их по целочисленному представлению. Поскольку sortedBy
возвращает List
, вам необходимо присоединиться к нему соответственно.
Есть и другие варианты выполнения того, что вы хотите, но я думаю, что это самый простой.
Если вы все еще хотите запросить номер заранее, вы все равно можете сделать это:
print("How often? ")
val howOften = readLine()!!.toInt()
(1..howOften).forEach {
print("${it + 1}. input: ")
readLine()!!.toCharArray()
.sorted()
.joinToString("")
.run(::println)
}
То же самое при использовании сканера будет выглядеть следующим образом:
Scanner(System.`in`).use { scanner ->
print("How often? ")
val howOften =scanner.nextInt()
scanner.nextLine()
(1..howOften).forEach {
print("${it + 1}. input: ")
scanner.nextLine().toCharArray()
.sorted()
.joinToString("")
.run(::println)
}
}