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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© NewDemo 中级黑马   /  2014-4-15 00:09  /  1428 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 NewDemo 于 2014-4-15 19:22 编辑

实现数组的反转,首先是错误代码
  1. public class Test1
  2. {

  3.         public static void main(String[] args)
  4.         {
  5.                 char[] ch={'a','c','f','g','v','d','r'};
  6.                 sop(ch);
  7.                 re(ch);
  8.                 sop(ch);
  9.         }
  10.         public static void sop(char[]chR)//定义方法,打印数组
  11.         {
  12.                 System.out.print("(");
  13.                 for(int x=0;x<chR.length && x!=chR.length-1;x++)
  14.                 {
  15.                                 System.out.print(chR[x]+",");        
  16.                 }
  17.                 System.out.println(chR[chR.length-1]+")");
  18.         }
  19.         public static char[] re(char []chs)//定义方法,进行反转
  20.         {
  21.                 int start=0,end=chs.length-1;
  22.                 for(;start<end;start++,end--)
  23.                 {
  24.                         swap(chs[start],chs[end]);
  25.                 }
  26.                 return chs;
  27.         }
  28.         public static void swap(char ch1,char ch2)//定义方法,传进两个字符,进行换位操作。
  29.         {
  30.                 char temp;
  31.                 temp=ch1;
  32.                 ch1=ch2;
  33.                 ch2=temp;
  34.         }
  35. }
复制代码

错误的原因,调用swap()时确实传入了两个字符没错,但是执行的结果是swap()并未对原数组进行操作或修改,所以数组并未实现反转
接下来是正确的
  1. public class Test1
  2. {

  3.         public static void main(String[] args)
  4.         {
  5.                 char[] ch={'a','c','f','g','v','d','r'};
  6.                 sop(ch);
  7.                 re(ch);
  8.                 sop(ch);
  9.         }
  10.         public static void sop(char[]chR)//定义方法,打印数组
  11.         {
  12.                 System.out.print("(");
  13.                 for(int x=0;x<chR.length && x!=chR.length-1;x++)
  14.                 {
  15.                                 System.out.print(chR[x]+",");        
  16.                 }
  17.                 System.out.println(chR[chR.length-1]+")");
  18.         }
  19.         public static char[] re(char []chs)//定义方法,进行反转
  20.         {
  21.                 for(int start=0,end=chs.length-1;start<end;start++,end--)
  22.                 {
  23.                         swap(chs,start,end);
  24.                 }
  25.                 return chs;
  26.         }
  27.         public static void swap(char []chs,int x,int y)//定义方法,传进两个字符,进行换位操作。
  28.         {
  29.                 char temp;
  30.                 temp=chs[x];
  31.                 chs[x]=chs[y];
  32.                 chs[y]=temp;
  33.         }
  34. }
复制代码
很久之前的错误了,大牛们轻拍。。。


评分

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

查看全部评分

5 个回复

倒序浏览
第一个程序中,swap接收的两个参数实际是两个基本数据类型的变量,传入swap内进行交换的是两个变量的拷贝,在swap范围内进行了变量值的交换,随着swap方法的结束,这两个值被释放了,之前传的值并没有发生任何改变。

第二个程序中,swap接收的是chs数组的地址、两个角标的拷贝,但swap函数中,拷贝地址与原地址相同,共同指向一个数组对象,这时进行交换,改变的是拷贝地址指向数组中元素,当swap方法结束,这些拷贝值被释放了,chs和两个角标中存储的地址和值都没有发生任何改变,但是chs指向的数组中的元素却发生了改变。

评分

参与人数 1技术分 +1 收起 理由
黑妞~ + 1

查看全部评分

回复 使用道具 举报
呆呆沙师妹 发表于 2014-4-15 09:03
第一个程序中,swap接收的两个参数实际是两个基本数据类型的变量,传入swap内进行交换的是两个变量的拷贝, ...

好专业的解释,好腻害,学习ing
回复 使用道具 举报
这不是C的经典SWAP么
回复 使用道具 举报
ithmC4 发表于 2014-4-15 12:27
这不是C的经典SWAP么

:dizzy:没学过c。。
回复 使用道具 举报
直接调用API类库中的reverse()方法
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马