从Kotlin的同一行读取多个int?

时间:2017-09-07 15:01:20

标签: kotlin

我正在Hackerrank的Kotlin做30天的守则,我被困在第7天。

如何在一行中读取多个整数?

如何将它添加到数组并反向显示?

我用Java解决了它,但缺少Kotlin所需的语法

输入:

4

1 4 3 2

我的代码:

fun main(args: Array<String>) {

   val n = readLine()!!.toInt()
   var arr = Array(n)
   for(i in 0 until n)
   {
      arr[i] = readLine()!!.toInt() //Not Working? nor does readLine()!!.split(' ').toInt()

   }
   for(item in arr.size - 1 downTo 0)
   {
      print("${item} ")
   }
}

4 个答案:

答案 0 :(得分:3)

编辑:问题已从原始

更新

问题是readLine()将从stdin中读取整行,因此每次在for循环中调用readLine()时,每次都会读取一条单独的行。

一种方法是读取该行,然后将每个值拆分并映射到Int。

readLine()?.let {
    val numOfValues = it.toInt()
    println(numOfValues)

    readLine()?.let { line ->
        line.split(" ").map {
            it.toInt()
        }.reversed().forEach {
            println(it)
        }
    }
}

答案 1 :(得分:0)

如果要将它们存储在列表中,则可以使用此方法

var items = readLine()!!.trim().split("\\s+".toRegex()).map (String::toInt)
println(items)

您也可以将它们存储在不同的变量中

var (a,b) = readLine()!!.trim().split("\\s+".toRegex()).map (String::toInt)
println(a+b)

答案 2 :(得分:0)

对于初学者,您还可以使用以下代码对拆分并存储在数组中的项目进行排序

fun main(ags :Array<String>) 
{ 
    var item = readLine()!!.trim()
    println(item[0])
}

答案 3 :(得分:0)

实际上,您可以参考Kotlin官方教程:https://kotlinlang.org/docs/tutorials/competitive-programming.html

如教程中所述:

要使在此类竞争性编程任务中的输入内容阅读更为简洁,可以具有以下辅助输入阅读功能列表:

private fun readLn() = readLine()!! // string line
private fun readInt() = readLn().toInt() // single int
private fun readStrings() = readLn().split(" ") // list of strings
private fun readInts() = readStrings().map { it.toInt() } // list of ints

对于您的情况,可以尝试如下使用:

fun main() {
    val n = readInt()
    val x = readInts()
    for (j in x.reversed()) {
        print(j); print(" ")
    }
    println()
}

private fun readLn() = readLine()!! // string line
private fun readInt() = readLn().toInt() // single int
private fun readStrings() = readLn().split(" ") // list of strings
private fun readInts() = readStrings().map { it.toInt() } // list of ints