如果没有我们可以通过引用传递的方法,如何在java中创建交换函数?有人可以给我一个代码吗?
swap(int a, int b)
{
int temp = a;
a = b;
b = temp;
}
Run Code Online (Sandbox Code Playgroud)
但是由于java通过值传递,因此不会反映出这种变化
dan*_*lmo 65
我认为这是最接近简单交换的,但它没有简单的使用模式:
int swap(int a, int b) { // usage: y = swap(x, x=y);
return a;
}
y = swap(x, x=y);
Run Code Online (Sandbox Code Playgroud)
它依赖于x将被分配到swap之前传入的事实,然后返回并分配给.yxxy
您可以使它成为通用的并交换任意数量的相同类型的对象:
<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)
Run Code Online (Sandbox Code Playgroud)
sep*_*p2k 24
您无法创建方法交换,因此在调用swap(x,y)x和y的值之后将进行交换.你可以通过交换它们的内容来为可变类创建这样一个方法,但是这不会改变它们的对象标识,你也无法为它定义一般方法.
但是,您可以编写一个方法,在数组或列表中交换两个项目(如果这是您想要的).
¹例如,您可以创建一个带有两个列表的交换方法,并且在执行该方法之后,列表x将具有列表y的先前内容,列表y将具有列表x的先前内容.
pol*_*nts 13
这取决于你想做什么.此代码交换数组的两个元素.
void swap(int i, int j, int[] arr) {
int t = arr[i];
arr[i] = arr[j];
arr[j] = t;
}
Run Code Online (Sandbox Code Playgroud)
像这样的东西交换两个int[]相等长度的内容.
void swap(int[] arr1, int[] arr2) {
int[] t = arr1.clone();
System.arraycopy(arr2, 0, arr1, 0, t.length);
System.arraycopy(t, 0, arr2, 0, t.length);
}
Run Code Online (Sandbox Code Playgroud)
像这样的东西交换两个内容BitSet(使用XOR交换算法):
void swap(BitSet s1, BitSet s2) {
s1.xor(s2);
s2.xor(s1);
s1.xor(s2);
}
Run Code Online (Sandbox Code Playgroud)
像这样的交换x和y一些领域Point类:
void swapXY(Point p) {
int t = p.x;
p.x = p.y;
p.y = t;
}
Run Code Online (Sandbox Code Playgroud)
显然,我没有足够的信誉分评上Dansalmo的答案,但它是一个很好的,虽然错命名.他的回答实际上是K-combinator.
int K( int a, int b ) {
return a;
}
Run Code Online (Sandbox Code Playgroud)
该JLS传递给方法/构建函数/等时是具体的关于论证评估.(在旧规格中不是这样吗?)
当然,这是一个功能性的习惯用语,但对于那些认识它的人来说它已经足够清楚了.(如果你不理解你找到的代码,不要乱用它!)
y = K(x, x=y); // swap x and y
Run Code Online (Sandbox Code Playgroud)
K-combinator专为此类设计而设计.AFAIK没有理由不通过代码审查.
我的0.02美元.
| 归档时间: |
|
| 查看次数: |
101603 次 |
| 最近记录: |