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的值交换?

解决方案 »

  1.   

    没有什么办法。
    只能把那交换的过程放在main()里。
      

  2.   

    放到object中 java对于基本数值型不能传递地址
      

  3.   

    object好像也不行,不知道怎么捣鼓了
      

  4.   

    package csdn;public class test
    {
    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]);
    }
    };
      

  5.   

    把它放到main()中
    是可以的!
      

  6.   

    public class ExchangeNumber {
    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;
    }
    }
      

  7.   

    main里面没有接收ob.Exchange(m, n);的返回值
      

  8.   

    楼主不要白费劲了,不可能的。除非你始终操作数组元素。比如:// 交换元素
    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
      

  9.   

    sorry笔误:
    int[]ii = {1,2};
    exchange( a );
    应该为
    int[]ii = {1,2};
    exchange( ii );--
    http://www.agui.googlepages.com
    mailto: agui.cn(a)gmail.com
      

  10.   

    java中的引用包括数组和对象,看来只能用数组或对象来实现了.
      

  11.   

    public class Test {
      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();
      }
    }
      

  12.   

    这应该是参数传递的问题,是by value,还是by reference
    传入的是object应该就没问题了
      

  13.   

    基本数据(如 Int,float,boolean等)变量多实参传递给被调用的方法采用是值的方法传递。
    只有String类型,数组类型和对象类型才会以地址的方法传递。
      

  14.   

    我是这样实现的,但还有一个问题,如果要进行三个以上数值交换该怎么办?
    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);
    }
    };
      

  15.   

    写成一个类喽。class AB
    {
    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;
    }
    }
      

  16.   

    “三个以上数值交换”,其它语言怎么交换? A->B->C->A?--
    http://www.agui.googlepages.com
    mailto: agui.cn(a)gmail.com
      

  17.   

    public void Exchange(Integer a, Integer b)就可以了
      

  18.   

    汗!!!
    既然知道了传值和传引用的区别,为什么不能从引用的角度考虑!
    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]);
    }
    }}
      

  19.   

    在java 1.4以前的版本,通过new操作符,可以用一个简单对象构造出一个位于堆上的复杂对象,而且每一个简单对象的背后,都有一个复杂对象的类提供折支持。它们是:Byte, Character, Short, Integer, Long, Double, Float和Boolean,这些对象能提供更高一级的数据操作能力,而且由于它们也是从Object类派生下来的,所以它们可以同Object之间进行转化,从而利用java的对象识别能力进行复杂应用。将一个简单对象置于堆上的操作,微软称其为“装箱”(Box)。
      

  20.   

    Byte, Character, Short, Integer, Long, Double, Float和Boolean 都是值对象,就是说它本身是多少就是多少,没有办法改变。--
    http://www.agui.googlepages.com
    mailto: agui.cn(a)gmail.com
      

  21.   

    两个数值交换用一个表达式不就ok了a=b+(b=a)*0
      

  22.   

    public class Test {
    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());
    }
    }
      

  23.   

    要使用面向对象的思想,其实处理方法也很多,但不一定要用数组。你的方法是写c的人喜欢的方法,但要是真的用c写,应该用到指针,而java是没有指针的概念的。
      

  24.   

    同意liufu44,3个数跟两个数没什么区别吧
      

  25.   

    int a,b;
    a=a+b;
    b=a-b;
    a=a-b;
    这样不是可以简单的交换两个数了!
      

  26.   

    搂主 告诉你为什么  比给你代码要好
    java有两大数据类型  一种是8大基本类型   一种是引用类型(除了基本类型其他基本都可看作引用类型)引用类型的对象 作为参数 即传值又传引用   那样的话你是可以Exchange()那样操作的  
    不幸的是int 类型是基本类型    作为参数的时候 只传值 
    所以会出现你那种情况
      

  27.   

    java 只支持值传递,除非用封装类
      

  28.   

    public class Mugs
    {
    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;
      

  29.   

    其实看值是否交换了,那就看参数传递的形式是by reference 还是 by value
      

  30.   

    这个问题也不是很麻烦的 参数传递不行。因为接受参数的子程序参数的改变不会影响到该方法以外。但是可以传递一个对象。
    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);
    }
    }
      

  31.   

    public void Exchange(int a, int b)
    里面的参数去掉就ok了。
      

  32.   

    public class test
    {
    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]);
    }
    }
    终于想出来了,数组是对象哈
      

  33.   

    hackangcn(龙卷风) 是个鬼才!a=b+(b=a)*0;--
    http://www.agui.googlepages.com
    mailto: agui.cn(a)gmail.com
      

  34.   

    我看这也说明了 java 的缺点,只能传值不能传引用, 不过对于学习者来说,这更好理解了。