You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 14:55:20