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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

import java.util.*;
class Halfsearch
{
    public static void main(String[] args)
    {
                char[] arr={'a','b','s','d','e','q','m'};
                for(int x=0;x<arr.length;x++)
                {
                        for(int y=0;y<arr.length-1-x;y++)
                        {
                                int num=new Character(arr[y]).compareTo(new Character(arr[y+1]));
                                if(num>0)
                                        swap(y,y+1);
                        }
                }
                sop(arr);
    }
        public static void swap(int s1,int s2)
        {
                int num;
                num=s1;
                s1=s2;
                s2=num;
        }
        public static void sop(char[] arr)
        {
                for(int x=0;x<arr.length;x++)
                {
                    System.out.print(arr[x]+" ");
                }
        }
}

评分

参与人数 1技术分 +1 收起 理由
FFF + 1 淡定

查看全部评分

10 个回复

倒序浏览
你的swap方法传进去再修改只是局部变量,对调用处的数据没操作。这里传来的都是数值,并非地址传递,具体搜一下相关资料吧,把比较方法写在上面就ok啦,看我的源码:
  1. import java.util.*;
  2. class Halfsearch
  3. {
  4.     public static void main(String[] args)
  5.     {
  6.                 char[] arr={'a','b','s','d','e','q','m'};
  7.                 for(int x=0;x<arr.length;x++)
  8.                 {
  9.                         for(int y=0;y<arr.length-1-x;y++)
  10.                         {
  11.                                 int num=new Character(arr[y]).compareTo(new Character(arr[y+1]));
  12.                                 if(num>0)
  13.                                 {
  14.                                         char tmp;
  15.                                         tmp=arr[y];
  16.                                         arr[y]=arr[y+1];
  17.                                         arr[y+1]=tmp;
  18.                                 }
  19.                         }
  20.                 }
  21.                 sop(arr);
  22.     }
  23.         public static void sop(char[] arr)
  24.         {
  25.                 for(int x=0;x<arr.length;x++)
  26.                 {
  27.                     System.out.print(arr[x]+" ");
  28.                 }
  29.         }
  30. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
FFF + 1 很给力!

查看全部评分

回复 使用道具 举报
看得晕,搞不明白
回复 使用道具 举报
楼主哇   把y和y+1互换是什么意思。。  这个让我纠结了半天  y和y+1互换是没有任何意义的
你把swap去掉 换成这个把。。。
  1. {
  2.                                         arr[y]^=arr[y+1];
  3.                                         arr[y+1]^=arr[y];
  4.                                         arr[y]^=arr[y+1];
  5.                                         }
复制代码

评分

参与人数 1技术分 +1 收起 理由
FFF + 1 赞一个!

查看全部评分

回复 使用道具 举报
qq379264347 发表于 2013-11-23 21:53
你的swap方法传进去再修改只是局部变量,对调用处的数据没操作。这里传来的都是数值,并非地址传递,具体搜 ...

嗯,谢谢。我懂了
回复 使用道具 举报
RuntimeError! 发表于 2013-11-23 22:02
楼主哇   把y和y+1互换是什么意思。。  这个让我纠结了半天  y和y+1互换是没有任何意义的
你把swap去掉 换 ...

呵呵,我也想不通
回复 使用道具 举报
这个错误很明显,出在swap(int , int)上,你这样转换相当于在栈内存中定义了两个变量,并且使得栈中两个变量互换,与堆内存无关,所以函数swap执行完后对主函数无影响。
你要明白,要调用一个函数,并且使得结果有效,只有两种办法,第一种是使用return方法并且记录返回的值。第二种方法就是将地址作为参数传递给函数,使其在堆内存中,即地址值中互换。所以这里要传入一个数组,数组是定义在堆内存中的变量,能使变量在地址值中互换。
在java中,你这样互换必须用swap(int[] , int , int)的方法,如果你学过C的话,也可以传入两个地址,即swap(&int , &int),个人觉得用C更好理解地址的问题。

评分

参与人数 1技术分 +1 收起 理由
FFF + 1 赞一个!

查看全部评分

回复 使用道具 举报
就像这种程序
  1. class test2
  2. {
  3.         public static void main(String[] args)
  4.         {
  5.                 int a = 1;
  6.                 add_5(a);
  7.                 System.out.println(a);
  8.         }
  9.         static void add_5(int y)
  10.         {
  11.                 y = y+5;
  12.         }
  13. }
复制代码
对a的操作是无意义的。。。

点评

FFF
技术分,上面已加!  发表于 2013-11-24 00:40
FFF
感谢你的用心回答!你的用心,我们都有看见  发表于 2013-11-24 00:24
回复 使用道具 举报
FFF 金牌黑马 2013-11-24 00:39:50
9#
如果问题已经解决,请及时修改主题为“提问结束”。
修改主题的方法链接
http://bbs.itheima.com/thread-89313-1-1.html
如果没有解决,可能你的问题问得不够清楚。可以重新发问的哦~
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马