如果没有我们可以通过引用传递的方法,我如何在 java 中创建我的交换函数?有人可以给我一个代码吗?
swap(int a, int b)
{
int temp = a;
a = b;
b = temp;
}
但是更改不会反映回来,因为 java 按值传递参数。
原文由 higherDefender 发布,翻译遵循 CC BY-SA 4.0 许可协议
如果没有我们可以通过引用传递的方法,我如何在 java 中创建我的交换函数?有人可以给我一个代码吗?
swap(int a, int b)
{
int temp = a;
a = b;
b = temp;
}
但是更改不会反映回来,因为 java 按值传递参数。
原文由 higherDefender 发布,翻译遵循 CC BY-SA 4.0 许可协议
我认为这是最接近简单交换的方法,但它没有直接的使用模式:
int swap(int a, int b) { // usage: y = swap(x, x=y);
return a;
}
y = swap(x, x=y);
It relies on the fact that x
will pass into swap
before y
is assigned to x
, then x
返回并分配给 y
。
您可以使其通用并交换任意数量的相同类型的对象:
<T> T swap(T... args) { // usage: z = swap(a, a=b, b=c, ... y=z);
return args[0];
}
c = swap(a, a=b, b=c)
原文由 dansalmo 发布,翻译遵循 CC BY-SA 3.0 许可协议
4 回答1.6k 阅读✓ 已解决
4 回答1.3k 阅读✓ 已解决
1 回答2.6k 阅读✓ 已解决
3 回答2k 阅读
2 回答785 阅读✓ 已解决
2 回答1.7k 阅读
2 回答1.3k 阅读
您不能创建方法交换,因此在调用
swap(x,y)
之后,x 和 y 的值将被交换。您可以通过交换可变类的内容¹为可变类创建这样的方法,但这不会改变它们的对象标识,并且您无法为此定义通用方法。但是,如果需要,您可以编写一个方法来交换数组或列表中的两个项目。
¹ 例如,您可以创建一个采用两个列表的交换方法,在执行该方法后,列表 x 将具有列表 y 的先前内容,而列表 y 将具有列表 x 的先前内容。