黑马程序员技术交流社区

标题: java中没了指针,那么如何在另一个类的函数中交换两个int a b [打印本页]

作者: 小黑子    时间: 2014-8-8 13:12
标题: java中没了指针,那么如何在另一个类的函数中交换两个int a b
今天在练习写代码,突然用到交换两个数,不是数组,就是两个 int 变量,
想在另一个类中写一个交换的方法,可是Java又不能传递指针,这样传递进去两个数,
在类A中,a,b的值肯定是不会交换的。那应该怎么办呀?(数组方法除外)
(我以前学了点C++,现在也全忘光了)是不是有个引用?用引用可不可以呀?
class A

{
    int a=1;
    int b=2;
    new B().swap(参数);
}
class B
{
    public 返回类型 swap(参数)
    {
        交换a与b
    }
}
class Demo
{
    public static void main(String[] args)
    {
        int a,b;
        A ca = new A();
        a = ca.a;
        b = ca.b;
        System.out.println("交换后:a="+a+",b="+b);
    }
}

作者: 小黑子    时间: 2014-8-8 13:39
这个问题确实有难度么?还是我问的太水了?
作者: 吥洅ㄨ错过ㄩ    时间: 2014-8-8 13:49
不难,可以用第三个参数做交换的中间变量
作者: 阳光的嘉主角    时间: 2014-8-8 16:06
class AA {
        int a = 5;
        int b = 6;

        public void swap() {
                a = b + (0 * (b = a));
                System.out.println("a b交换后: a =" + a + "\n b =" + b);
        }
}

class BB {
        public void swap(AA a) {
                a.swap();
        }
}


///调用
        AA a = new AA();
                BB b = new BB();
                b.swap(a);
作者: 地狱天堂    时间: 2014-8-8 16:06
有三种方法
1,开发时用,使用第三方变量的形式,因为阅读性强。
int a=1,b=2,c;
c=a;
a=b;
b=c;

2,(不需要第三方变量)如果两个整数的数值过大,会超出int范围,会强制转换。不建议用。
int a = 1, b =2;
a = a + b;
b = a - b;
a = a - b;

3,两个整数变量的值进行互换 (不需要第三方变量)
int a = 1, b =2;
a = a ^ b;
b = a ^ b;
a = a ^ b;

作者: 小黑子    时间: 2014-8-8 16:11
阳光的嘉主角 发表于 2014-8-8 16:06
class AA {
        int a = 5;
        int b = 6;

哥哥,看清楚题目……,变量a,b是在调用swap()的类里边
作者: 小黑子    时间: 2014-8-8 16:13
地狱天堂 发表于 2014-8-8 16:06
有三种方法
1,开发时用,使用第三方变量的形式,因为阅读性强。
int a=1,b=2,c;

兄弟,你没理解我的意思。。。。。。
作者: 小黑子    时间: 2014-8-8 16:15
吥洅ㄨ错过ㄩ 发表于 2014-8-8 13:49
不难,可以用第三个参数做交换的中间变量

哥们,你是不是看错题目了,你真照我这个格式写下来,恐怕定义两个中间变量,也不能行吧。
作者: 我行我SHOW‰    时间: 2014-8-9 14:57
地狱天堂 发表于 2014-8-8 16:06
有三种方法
1,开发时用,使用第三方变量的形式,因为阅读性强。
int a=1,b=2,c;

正解,赞一个!
作者: 韩天雷    时间: 2014-8-9 16:34
无法实现
但是可以传入数组 交换数组中的两个数的值  然后返回数组
作者: 曾宇    时间: 2014-8-9 16:47
代码如下:
  1. class A

  2. {
  3.     int a=1;
  4.     int b=2;
  5.     new B().swap(a,b);
  6. }
  7. class B
  8. {
  9.     public 返回类型 swap(int a,int b)
  10.     {
  11.         int c=0;
  12.         c=a;
  13.         a=b;
  14.         b=c;
  15.         return a,b;
  16.     }
  17. }
  18. class Demo
  19. {
  20.     public static void main(String[] args)
  21.     {
  22.         int a,b;
  23.         A ca = new A();
  24.         a = ca.a;
  25.         b = ca.b;
  26.         System.out.println("交换后:a="+a+",b="+b);
  27.     }
  28. }
复制代码

作者: 小黑子    时间: 2014-8-20 16:34
曾宇 发表于 2014-8-9 16:47
代码如下:

这个…………return 还可以返回俩值么??
还有第10行的返回类型到底是啥?
作者: 小黑子    时间: 2014-8-21 09:03
是不是真的没有办法了:'(
作者: 曾宇    时间: 2014-8-22 01:35
小黑子 发表于 2014-8-21 09:03
是不是真的没有办法了

你需要返回的值是什么类型的,返回值类型就是什么
这里,你可以把int a 和int b 放到 数组中。
比如:
int c[] = new int[2];
c[0] = a;
c[1] = b;


作者: 小黑子    时间: 2014-8-22 10:22
曾宇 发表于 2014-8-22 01:35
你需要返回的值是什么类型的,返回值类型就是什么
这里,你可以把int a 和int b 放到 数组中。
比如:

这不还是用到了数组么…………没有别的方法了是吧,谢谢啦。
作者: 草鱼狂飙    时间: 2014-8-22 21:25
数组可以实现直接访问地址…………
作者: 小黑子    时间: 2014-8-22 22:12
草鱼狂飙 发表于 2014-8-22 21:25
数组可以实现直接访问地址…………

我想知道不用数组能不能做。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2