Kotlin函数传参问题:交换函数报错及ref关键字失效求助
问题分析与解决方案
你的代码存在两个核心问题:
- 函数参数默认只读:Kotlin里函数参数默认是
val(不可变),所以你在swap函数中给a、b赋值时会报错——只读变量不允许被重新赋值。 - 值传递的局限性:即便把参数改成
var,由于Int是值类型,函数接收的是变量副本,修改副本不会影响main里的原始变量。另外Kotlin没有类似C#的ref关键字,尝试用ref是无效的。
解决方案1:返回交换后的Pair(最推荐,适合新手)
通过返回Pair<Int, Int>类型将交换后的值返回给调用方,再重新赋值给原始变量:
fun swap(a: Int, b: Int): Pair<Int, Int> { // 用你原本的xor逻辑实现交换 var x = a var y = b x = x xor y y = y xor x x = x xor y return x to y // 也可以直接简化成:return b to a,效果完全一致 } fun main() { var a = 10 var b = 1000 // 解构赋值获取交换后的值 val (newA, newB) = swap(a, b) a = newA b = newB // 注意:Kotlin字符串模板用$符号,不是% println("$a, $b") }
解决方案2:用数组包装(利用引用传递)
数组是引用类型,函数内修改数组元素会直接影响外部:
fun swap(arr: IntArray) { if (arr.size < 2) return arr[0] = arr[0] xor arr[1] arr[1] = arr[1] xor arr[0] arr[0] = arr[0] xor arr[1] } fun main() { var a = 10 var b = 1000 val arr = intArrayOf(a, b) swap(arr) a = arr[0] b = arr[1] println("$a, $b") }
内容的提问来源于stack exchange,提问作者codemaivanngu
相关产品推荐
相关产品推荐

