【发布时间】:2015-09-27 05:27:18
【问题描述】:
我正在尝试在 java 中创建一个交换函数,但为什么这不起作用?
void swap(int a, int b) {
int temp = a;
a = b;
b = temp;
}
【问题讨论】:
-
提示:你不能编写在 Java 中工作的交换(带有该签名)。
我正在尝试在 java 中创建一个交换函数,但为什么这不起作用?
void swap(int a, int b) {
int temp = a;
a = b;
b = temp;
}
【问题讨论】:
因为 java 是 pass by value 而不是通过引用传递。你的交换方法不会改变实际的a 和b。你实际上交换了a 和b,它们只在方法内部有生命。您可以通过在 swap 方法中打印 a 和 b 来检查。
您可以在数组的帮助下返回交换的值。 (由sᴜʀᴇsʜ ᴀᴛᴛᴀ先添加)
public class Test {
static int[] swap(int a, int b) {
return new int[]{b,a};
}
public static void main(String[] args) {
int a = 10,b = 5;
int[] ba = swap(a,b);
a = ba[0];
b = ba[1];
System.out.println(a);
System.out.println(b);
}
}
【讨论】:
您的swap 只是将值的副本复制到a 和b,因此您只是在swap 的范围内交换a 和b 变量中的值。
【讨论】:
public class HelloWorld {
private int a, b;
HelloWorld(){
this.a=0;
this.b=0;
}
HelloWorld(int a, int b){
this.a=a;
this.b=b;
}
void swap() {
int temp = this.a;
this.a = this.b;
this.b = temp;
}
public static void main(String[] args) {
HelloWorld obj = new HelloWorld(10,5);
obj.swap();
System.out.println("a="+obj.a);
System.out.println("b="+obj.b);
}
}
如果您使用局部变量,则范围将在 swap() 方法内。但是,如果您将其用作实例变量,则此示例会有所帮助。
实例变量的范围将在整个类中可用。
对于范围,您可以查看
http://www.tutorialspoint.com/java/java_variable_types.htm
如果您想使用局部变量,那么 TAsk 给出的答案会更有帮助。根据您的要求。
【讨论】: