我们可以使用两个变量在kotlin中交换两个数字并接受用户输入吗?

时间:2018-07-19 12:11:03

标签: kotlin kotlin-android-extensions kotlin-extension rx-kotlin kotlin-interop

我通过以下程序尝试了此操作,但是它显示了预期的kotlin变量错误:

[enter image description here

4 个答案:

答案 0 :(得分:3)

这不是传统方式,但是无论如何:

fun main(args: Array <String> ) {
    var a = readLine()!!.toInt()
    var b = readLine()!!.toInt()
    println("a=$a and b=$b")

    val c = a + b
    a = c - a
    b = c - b
    println("now a=$a and b=$b")
}

这是传统方式:

fun main(args: Array <String> ) {
    var a = readLine()!!.toInt()
    var b = readLine()!!.toInt()
    println("a=$a and b=$b")

    val c = a
    a = b
    b = c
    println("now a=$a and b=$b")
}

这是Kotlin方法,其中仅2个变量

fun main(args: Array <String> ) {
    var a = readLine()!!.toInt()
    var b = readLine()!!.toInt()
    println("a=$a and b=$b")

    a = b.also { b = a }
    println("now a=$a and b=$b")
}

答案 1 :(得分:1)

我不知道为什么要交换值,但是根据您要精确执行的操作以及是否不需要变量,这是使用Pair的另一种方法:

(readLine()!! to readLine()!!)
  .also(::println) // optional
  .map { a, b -> b to a }
  .also(::println) // optional

打印输入12的内容:

(1, 2)
(2, 1)

有关进一步交换的可能性,您可能还需要查看:Swap Function in Kotlin

带有Enter a等的示例:

val ask : (String) -> String = {
  print(it)
  readLine()!!
}
(ask("Enter a: ") to ask("Enter b: "))
  .map { a, b -> b to a }

答案 2 :(得分:0)

使用Kotlin型铸造的力量,就完成了!

    var a = readLine()!!
    var b = readLine()!!
    //print

    val c = a.toInt() + b.toInt()
    b = (c-b.toInt()) as String
    a = (c-a.toInt()) as String
    //print

答案 3 :(得分:0)

您可以使用名为'also'的kotlin标准函数。

var a = readLine()!!
var b = readLine()!!
a = b.also { b = a }