java值交换问题(为什么没有值没有交换过来)

来源:百度知道 编辑:UC知道 时间:2024/05/27 12:45:15
public class Changer
{
public static void main(String[] args)
{
double x = 3.0;
double y = 4.0;
falseSwap(x,y);
System.out.print(x+" "+y);
}
public static void falseSwap(double a, double b)
{
double temp = a;
a = b ;
b = temp;
}
}
大哥大姐们 我只有2分 投不出去 求求帮帮小妹我吧 以后有分再加
看了下你们答案:我要的是无条件交换,jayhebe代码全改了 还是有条件的交换; 另外zyszys3答案要在double x,y前加static才可以,不然会报错,改过来后,2个值还是没有交换过来.不过谢谢各位了!

主要是你没搞清楚值传递和址传递的关系.这里你传入的X,Y是值传递,只是把X,Y的值传递过去了,在falseSwap方法里对传入的值做任何改变都不会影响到原来X,Y的值.这里有两种方法可供参考:
一是将X,Y作为全局变量来进行使用:
public class Changer
{
public static double x,y;
public static void main(String[] args)
{
x = 3.0;
y = 4.0;
falseSwap(x,y);
System.out.print(x+" "+y);
}
public static void falseSwap(double a, double b)
{
x=b;
y=a;
}
}
二是利用构造方法完成这一效果:
public class Changer
{
public static void main(String[] args)
{
double x = 3.0;
double y = 4.0;
falseSwap(x,y);
System.out.println(x+" "+y);
}
public static void falseSwap(double a, double b)
{
double xm= a;
a = b ;
b = xm;
}
}
当然你也可以重新定义一个类来封装这两个数据并给以交换就可以了.方法感觉很多

你的方法是把参数的值进行调换,在C++中是可以的,但在Java中不可以,因为Java中对象的引用是通过值来传递的,所以你定义的方法并不能工作,打印出来x和y的值仍是3.0和4.0

*************************