如何在Kotlin中无需第三变量一行实现两数交换(替代C/C++写法)
Kotlin一行代码交换两变量(仅用x和y)
原C语言写法在Kotlin中失效的原因是:Kotlin里赋值操作不是表达式,无法像C那样把y=x嵌入到算术表达式中执行,这就是你遇到报错的核心原因。
以下是几种符合要求的实现方式:
方法1:利用Kotlin的also标准库函数(最简洁的Kotlin风格)
这是最贴合Kotlin特性的写法,一行完成,且适用于所有变量类型(不止整数),无溢出风险:
fun main() { var x = 5 var y = 10 x = y.also { y = x } // 核心交换逻辑 println("X = $x, Y = $y") // 输出:X = 10, Y = 5 }
原理:also函数会先返回y的原始值,同时在lambda代码块中将x的原始值赋值给y,最终把y的原始值赋值给x,完成交换。
方法2:算术运算交换(仅适用于数值类型,注意溢出)
通过加减法逻辑实现,一行内用分号分隔多个语句:
fun main() { var x = 5 var y = 10 x += y; y = x - y; x -= y // 核心交换逻辑 println("X = $x, Y = $y") }
原理:先让x存储两数之和,再通过减法依次还原出对方的原始值。但需注意,若数值过大可能触发整数溢出问题。
方法3:位运算交换(仅适用于整数类型,无溢出风险)
利用异或运算的特性完成交换,同样一行内实现:
fun main() { var x = 5 var y = 10 x = x xor y; y = x xor y; x = x xor y // 核心交换逻辑 println("X = $x, Y = $y") }
原理:异或运算满足a xor a = 0、a xor 0 = a的特性,通过三次异或操作可完成交换,且不会出现算术运算的溢出问题。
内容的提问来源于stack exchange,提问作者Shoaib Kakal
相关产品推荐
相关产品推荐

