A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© quanhui 黑马帝   /  2011-11-16 16:29  /  2486 人查看  /  10 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

想写一个方法,没有返回值,方法的作用是交换两个参数的值。如输入a=1,b=2 则运行方法之后a=2,b=1
void Change(int a, int b)
{

//怎么写
}

求高人告诉我这个方法怎么实现呢? 请注意这里的参数可都是基本类型哦!

评分

参与人数 1技术分 +1 收起 理由
宁超 + 1

查看全部评分

10 个回复

倒序浏览
  1. class Test
  2. {
  3.         public static void main(String[] args)
  4.         {
  5.                 int x = 2, y = 3;
  6.                 System.out.println("交换前的x="+x+"y="+y);
  7.                                 swapName(x,y);
  8.                                 System.out.println("调用swapName方法之后的x="+x+"y="+y);
  9.                                 int temp=0;
  10.                                 temp=x;  
  11.                                 x=y;
  12.                                 y=temp;
  13.                                 System.out.println("传值交换后的x="+x+"y="+y);
  14.         }

  15.         private static void swapName ( int a, int b )
  16.         {
  17.                 int temp = a;
  18.                 a = b;
  19.                 b = temp;
  20.            System.out.println("参数引用交换后的x="+a+"y="+b);
  21.         }
  22. }
复制代码
可参照帖子http://bbs.itheima.com/forum.php ... amp;page=1#pid19114

评分

参与人数 1技术分 +1 收起 理由
宁超 + 1 不错。

查看全部评分

回复 使用道具 举报
欧阳文愿 发表于 2011-11-16 17:00
可参照帖子http://bbs.itheima.com/forum.php?mod=viewthread&tid=3334&page=1#pid19114

看一下输出就知道,那个方法没起作用,方法里面的变量值确实变了,但是main方法里的变量还是原来的值

评分

参与人数 1技术分 +1 收起 理由
宁超 + 1

查看全部评分

回复 使用道具 举报
不可能实现!
基本类型和基本类型变量被当作参数传递给方法时,是值传递。在方法实体中,无法给原变量重新赋值,也无法改变它的值。

评分

参与人数 1技术分 +1 收起 理由
宁超 + 1

查看全部评分

回复 使用道具 举报
楼上说的对,不可能实现。
基本数据类型的参数传递是值传递,只是将栈内存中变量的值复制后传递给方法。
无论方法体内的形参(a和b)怎么交换,都不会影响实参(a和b)的值。

评分

参与人数 1技术分 +1 收起 理由
宁超 + 1

查看全部评分

回复 使用道具 举报
以下是C#中的解决办法:
public void Change(ref int a, ref int b)
{
       a = a ^ b;
       b = a ^ b;
       a = a ^ b;
}
ref 关键字使参数按引用传递。其效果是,当控制权传递回调用方法时,在方法中对参数所做的任何更改都将反映在该变量中。
看来Java至少在这个问题上是落后的。
回复 使用道具 举报
程立彬 黑马帝 2011-11-17 11:10:08
7#
楼主可以换一个方法
void Change(int& a, int& b)
{
   int temp = a;
             a = b;
             b = temp;

}

通过引用传递。
回复 使用道具 举报
quanhui 黑马帝 2011-11-17 11:15:59
8#
程立彬 发表于 2011-11-17 11:10
楼主可以换一个方法
void Change(int& a, int& b)
{

这是Java么???
回复 使用道具 举报
程立彬 黑马帝 2011-11-17 11:19:43
9#
quanhui 发表于 2011-11-17 11:15
这是Java么???

java不能有引用吗?
回复 使用道具 举报
moonlight 黑马帝 2011-11-17 11:20:40
10#
你定义了a=1,b=2.然后把这两个值当做参数调用了  change(a,b)方法 这个方法的作用只是形参交换数值 ,但对实参没有任何影响。不知道你发现这一点没有 你定义的这两个静态变量 static int a; static int b; 与change(a,b)方法里的a和b根本不是一回事,是两个不同的性质。public static void change(int a,int b)
{
      a = a+ b;   
      b = a - b;   
      a = a - b;   

}
这个方法体里的a,b只是形参

评分

参与人数 1技术分 +1 收起 理由
admin + 1

查看全部评分

回复 使用道具 举报
张晨 黑马帝 2011-11-17 11:21:48
11#
把a 、b 定义成Integer类型就可以
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马