我用了3种方式试验,都没有成功,请高手指点
1,直接写函数交换
change(int a,int b)
{
int c;
c = a;
a = b;
b = c;
}
不行,而且我知道肯定不行.因为是传值方式,而不是传址方式.
2,用原子数据包装类来实现.
change(Integer a,Integer b)
{
Integer c;
c = a;
a = b;
b = c;
}
但是结构还是不行,我怀疑是因为是因为原子数据包装类的不可改变性造成的.
于是我又试验了第三种方法.
3,创建一个对象,对象中保存着数值,然后交换两个对象.
class A
{
int a;
public void setA(int a)
{
this.a = a;
}
public int getA()
{
return this.a;
}
};
class Test
{
public static void change(A a,A b)
{
A c;
c =a;
a = b;
b = c;
}
public static void main(String[] args)
{
A a = new A();
A b = new A();
a.setA(12);
b.setA(14);
change(a,b);
System.out.println("a is "+a.getA()+",b is "+b.getA());
System.out.println("Hello World!");
}
}
但是结果输出却是 :
a is 12,b is 14
----------------
这是为什么,请大虾帮助一下!
1,直接写函数交换
change(int a,int b)
{
int c;
c = a;
a = b;
b = c;
}
不行,而且我知道肯定不行.因为是传值方式,而不是传址方式.
2,用原子数据包装类来实现.
change(Integer a,Integer b)
{
Integer c;
c = a;
a = b;
b = c;
}
但是结构还是不行,我怀疑是因为是因为原子数据包装类的不可改变性造成的.
于是我又试验了第三种方法.
3,创建一个对象,对象中保存着数值,然后交换两个对象.
class A
{
int a;
public void setA(int a)
{
this.a = a;
}
public int getA()
{
return this.a;
}
};
class Test
{
public static void change(A a,A b)
{
A c;
c =a;
a = b;
b = c;
}
public static void main(String[] args)
{
A a = new A();
A b = new A();
a.setA(12);
b.setA(14);
change(a,b);
System.out.println("a is "+a.getA()+",b is "+b.getA());
System.out.println("Hello World!");
}
}
但是结果输出却是 :
a is 12,b is 14
----------------
这是为什么,请大虾帮助一下!
{
int a;
public void setA(int a)
{
this.a = a;
}
public int getA()
{
return this.a;
}
};
class Test
{
public static void change(A a,A b)
{
int c;
c =a.getA();
a.setA(b.getA());
b.setA(c);
}
public static void main(String[] args)
{
A a = new A();
A b = new A();
a.setA(12);
b.setA(14);
change(a,b);
System.out.println("a is "+a.getA()+",b is "+b.getA());
System.out.println("Hello World!");
}
}
int [] b = {20};void swap (int [] a,int [] b) {
int t = a[0];
a[0] = b[0];
b[0] = t;
}
//a[0] == 20;
//b[0] == 10;
class A
{
int a;
public void setA(int a)
{
this.a = a;
}
public int getA()
{
return this.a;
}
};
class Test
{
static private A a = new A();
static private A b = new A();
public static void change()
{
A c;
c =a;
a = b;
b = c;
}
public static void main(String[] args)
{
a.setA(12);
b.setA(14);
change();
System.out.println("a is "+a.getA()+",b is "+b.getA());
System.out.println("Hello World!");
}
}
同上
lydvqq(碧水情缘♀黑哥)把我的意思误解了,把
A a = new A();
A b = new A();
设为全局变量当然可以了.这不用说了zhangxf(反我恕)的解释还可以,但我不想这样交换!为什么:
class Test
{
public static void change(int a[],int b[])
{
int c ;
c = a[0];
a[0] = b[0];
b[0] = c;
}
public static void main(String[] args)
{
int a[]= new int[1];
int b[]= new int[1];
a[0] = 1;
b[0] = 2;
change(a,b);
System.out.println("a[0] "+a[0]+",b[0] is "+b[0]);
System.out.println("Hello World!");
}
}
能够实现整形值的转换,而
class A
{
int a;
public void setA(int a)
{
this.a = a;
}
public int getA()
{
return this.a;
}
};
class Test
{
public static void change(A a,A b)
{
A c;
c =a;
a = b;
b = c;
}
public static void main(String[] args)
{
A a = new A();
A b = new A();
a.setA(12);
b.setA(14);
change(a,b);
System.out.println("a is "+a.getA()+",b is "+b.getA());
System.out.println("Hello World!");
}
}
却不能?
请大家解释一下!
即:
change(Integer a,Integer b)
{
Integer c;
c = a;
a = b;
b = c;
}
{
Integer c;
c = a;
a = b;
b = c;
}
你这个做法,虽然是用的包装类来交换的数据,但是进入change函数的时候,a和b是change函数内的局部变量,他们引用的是你传入的两个Integer类型,你再函数内部交换了a和b,也只是把局部变量引用的对象交换了,并没有达到你想要的结果。
贴篇文章给搂住看看估计就能明白了。
首先,你要知道change中的a,b与主函数中的不同。为了方便理解,可以把a,b想象成c中的指针,change中的a与主函数中的a指向相同的内存空间。改变change中的a的指向,与主函数中的a毫无关系。
//略去
int a;
int b;
a=a+b;
b=a-b;
a=a-b;
//略去
{
int a;
public void setA(int a)
{
this.a = a;
}
public int getA()
{
return this.a;
}
};
class Test
{
public static void change(A a,A b)
{
int tmpA = a.getA();
int tmpB = b.getA();
b.setA(tmpA);
a.setA(tmpB);
}
可以了,你函数中传过来的a,b只是引用的拷贝,你把它指向其他的句柄当然原来引用指向的类实例不会变了。
trave(int a,int b){
a=a+b;
b=a-b;
a=a-b;
}
这样就可以了.