public class test
{
public void Exchange(int a, int b)
{
int temp;
temp = a;
a = b;
b = temp;
}
public static void main(String agrs[])
{
test ob = new test();
int m = 44, n = 77;
System.out.println("before exchange: m = " + m + ", n = " + n);
ob.Exchange(m, n);
System.out.println("after exchange: m = " + m + ", n = " + n);
}
};
以上程序输出:before exchange: m = 44, n = 77
after exchange: m = 44, n = 77可以看出m、n的值并没有交换,请问怎样修改Exchange()函数才能让m、n的值交换?
{
public void Exchange(int a, int b)
{
int temp;
temp = a;
a = b;
b = temp;
}
public static void main(String agrs[])
{
test ob = new test();
int m = 44, n = 77;
System.out.println("before exchange: m = " + m + ", n = " + n);
ob.Exchange(m, n);
System.out.println("after exchange: m = " + m + ", n = " + n);
}
};
以上程序输出:before exchange: m = 44, n = 77
after exchange: m = 44, n = 77可以看出m、n的值并没有交换,请问怎样修改Exchange()函数才能让m、n的值交换?
解决方案 »
- 为什么感觉现在学的java没用呢
- java 有关人鬼过河的一个问题
- 为什么两次打印结果的顺序不一样
- 一个字符串处理的问题,急
- JAVA 语言进制转换问题。大家看看。38。42*100 返回 3841
- 求助,关于字符串分割的问题,在线,急等,解决问题立即揭贴。。。如有一未知的字符串,可能是String a="3231,3232,3234," ,也可能是Stri
- 用Swing做了个图形界面,在jdk1.4.x下操作速度很慢,请这方面有经验的兄弟进来发表高见!
- 怎样取出这个程序C的值?
- 【求助: 如何操作 .db 数据文件】
- 关于java类名的疑问,100分
- 请问一个关于图片编码传输的问题(高分求解)
- Java Applet中如何加入事件监听
只能把那交换的过程放在main()里。
{
public int[] Exchange(int a, int b)
{
int [] rest = new int[2];
int temp;
temp = a;
a = b;
b = temp;
rest[0]=a;
rest[1]=b;
return rest;
}
public static void main(String agrs[])
{
test ob = new test();
int m = 44, n = 77;System.out.println("before exchange: m = " + m + ", n = " + n);
int [] rest = new int[2];
rest = ob.Exchange(m, n);
System.out.println("after exchange: m = " + rest[0] + ", n = " + rest[1]);
}
};
是可以的!
private int m = 44,n=77;
public static void main(String[] args) {
ExchangeNumber en = new ExchangeNumber();
System.out.println(en.m+" "+en.n);
en.exchange(en);
System.out.println(en.m+" "+en.n);
}
public void exchange(ExchangeNumber en){
int temp = en.m;
en.m = en.n;
en.n = temp;
}
}
void exchange( int []a, int i, int j ) {int tmp = a[i]; a[i] = a[j]; a[j] = tmp;}
// 交换前两个
void exchange( int []a ) {exchange( a, 0, 1 );}int[]ii = {1,2};
exchange( a );把 ii[0], ii[1] 当成是a, b来操作,比如计算 c=a+b:
int c = ii[0] + ii[1];
int d = ii[0] * ii[1];--
http://www.agui.googlepages.com
mailto: agui.cn(a)gmail.com
int[]ii = {1,2};
exchange( a );
应该为
int[]ii = {1,2};
exchange( ii );--
http://www.agui.googlepages.com
mailto: agui.cn(a)gmail.com
public static void main(String[] args) {
int i = 10, j = 44;
class Exchange {
void exchange() {
int t = i;
i = j;
j = t;
}
}
new Exchange().exchange();
}
}
传入的是object应该就没问题了
只有String类型,数组类型和对象类型才会以地址的方法传递。
public class test2
{int a;
int b;
public static void main(String agrs[])
{
test2 ob = new test2();
ob.a = 44;
ob.b = 77;
System.out.println("before exchange: m = " + ob.a + ", n = " + ob.b);System.out.println("after exchange: m = " + ob.b + ", n = " + ob.a);
}
};
{
private int a;
private int b;
pubilc int getA();
public int getB();
public void setA();
public void setB();
public void exchange() {
int temp = a;
a = b;
b = temp;
}
}
http://www.agui.googlepages.com
mailto: agui.cn(a)gmail.com
既然知道了传值和传引用的区别,为什么不能从引用的角度考虑!
public class Test {
public Test() {}
public static void main(String[] args) {
int[] ints = new int[] { 1, 2, 3};
printIntArray(ints);
ints = test(ints);
printIntArray(ints);
}
public static int[] test(int[] args) {
int length = args.length;
int[] newargs = new int[length];
for (int i = 0; i < length; i++) {
newargs[length - 1 - i] = args[i];
}
return newargs;
}
public static void printIntArray(int[] args) {
int length = args.length;
System.out.println("Print int array:");
for (int i = 0; i < length; i++) {
System.out.println(args[i]);
}
}}
http://www.agui.googlepages.com
mailto: agui.cn(a)gmail.com
private int a;
private int b;
public int getA() {
return a;
}
public void setA(int a) {
this.a = a;
}
public int getB() {
return b;
}
public void setB(int b) {
this.b = b;
}
/**
* @param args
*/
public void Exchange(int a, int b){
int temp;
this.a = a;
this.b = b;
temp = this.a;
this.a = this.b;
this.b = temp; }
public static void main(String[] args) {
Test ob = new Test();
int m = 44, n = 77;
System.out.println("before exchange: m = " + m + ", n = " + n);
ob.Exchange(m, n);
System.out.println("after exchange: m = " + ob.getA() + ", n = " + ob.getB());
}
}
a=a+b;
b=a-b;
a=a-b;
这样不是可以简单的交换两个数了!
java有两大数据类型 一种是8大基本类型 一种是引用类型(除了基本类型其他基本都可看作引用类型)引用类型的对象 作为参数 即传值又传引用 那样的话你是可以Exchange()那样操作的
不幸的是int 类型是基本类型 作为参数的时候 只传值
所以会出现你那种情况
{
int m ,n;
public void Exchange(int a, int b)
{
m=b;
n=a;
}
public static void main(String agrs[])
{
Mugs ob = new Mugs();
int m = 44;
int n = 77;
System.out.println("before exchange: m = " + m + ", n = " + n);
ob.Exchange(m, n);
System.out.println("after exchange: m = " + ob.m + ", n = " + ob.n);
}
};
以上代码运行通过,且结果正确~~~~
楼主原代码里虽然ob.Exchange(m, n)了,但打印时还是用System.out.println("after exchange: m = " + m + ", n = " + n);这样打印出来的其实还是你是main()里定义的int m = 44, n = 77;
class Test{ int a,b;
Test(int i,int j){
a=i;
b=j;
}
}void meth(Test o){
int t;
t=o.a;
o.a=o.b;
o.b=t;}
public static void main(String agrs[])
{
Test ob = new Test(44,77);
System.out.println("before exchange: a = " + ob.a + ", b = " + ob.b);
ob.meth(ob);
System.out.println("after exchange: a = " + ob.a+ ", b = " + ob.b);
}
}
里面的参数去掉就ok了。
{
public void Exchange(int[] a)
{
int temp;
temp = a[0];
a[0] = a[1];
a[1] = temp;
}
public static void main(String agrs[])
{
test ob = new test();
int[] m={44,55};
System.out.println("before exchange: m = " + m[0] + ", n = " + m[1]);
ob.Exchange(m);
System.out.println("after exchange: m = " + m[0] + ", n = " + m[1]);
}
}
终于想出来了,数组是对象哈
http://www.agui.googlepages.com
mailto: agui.cn(a)gmail.com