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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 史政法 中级黑马   /  2013-4-3 06:45  /  1133 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 史政法 于 2013-4-5 20:51 编辑
  1. /*
  2. 对字符串中字符进行自然顺序排序。

  3. 思路:
  4. 1,字符串变成字符数组。
  5. 2,对数组排序,选择,冒泡,Arrays.sort();
  6. 3,将排序后的数组变成字符串。

  7. "vcz1bdAa+cs"-->abccdsvz
  8. */
  9. import java.util.*;

  10. class  Demo
  11. {
  12.         public static void sop(Object obj)
  13.         {
  14.                 System.out.println(obj);
  15.         }

  16.         public static void main(String[] args)
  17.         {
  18.                 String s = "vcz1bdAa+cs";
  19.                 s = toSort(s);
  20.                 sop(s);
  21.         }

  22.         public static String toSort(String s)
  23.         {
  24.                 //将字符串变成字符数组
  25.                 char[] chr = new char[s.length()];
  26.                 chr = s.toCharArray();
  27.                 //对字符数组进行排序,使用选择排序。排序过程中判断字符是否是小写a-z之间的字符,如果不是,不排序,
  28.                 sort(chr);                                         //<font color="#ff0000">这个地方,明明已经把小写的a-z选出来排序过了,为什么转成字符串后还是原来的字符串呢?为什么为什么啊?</font>
  29.                 //将排序后的数组变成字符串。
  30.                 return String.valueOf(chr);
  31.         }

  32.         //对数组进行排序
  33.         public static void sort(char[] chr)
  34.         {
  35.                 chr = clear(chr);
  36.                 for(int x = 0;x<chr.length;x++)
  37.                 {
  38.                                 for(int y = x+1;y<chr.length;y++)
  39.                                 {
  40.                                         if(chr[x]>chr[y])
  41.                                                 location(chr,x,y);
  42.                                 }
  43.                 }
  44.         }
  45.         //获取小写a-z的字符
  46.         public static char[] clear(char[] chr)
  47.         {
  48.                 StringBuilder sb = new StringBuilder();
  49.                 for(int x = 0;x<chr.length;x++)
  50.                 {
  51.                         if((chr[x]>='a' && chr[x]<='z'))
  52.                                 sb.append(chr[x]);
  53.                 }
  54.                 String s = sb.toString();
  55.                 return s.toCharArray();
  56.         }
  57.         //换位动作。
  58.         public static void location(char[] chr,int x,int y)
  59.         {
  60.                 char temp = chr[x];
  61.                 chr[x] = chr[y];
  62.                 chr[y] = temp;
  63.         }
  64. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
张熙韬 + 1 神马都是浮云

查看全部评分

5 个回复

倒序浏览
晕,问题在33行 font color标签内,,,,
回复 使用道具 举报
我自己又看了几遍,发现,在第41行,chr = clear(chr);,,,这句话字符数组类型变量chr已经重新指向了一个新的数组,所以下面的for运算,运算的是新的数组中的内容,跟原引用毛联系都没有,真蛋疼,,,,,,,解决办法就是,别在排序里获取小写的a-z字符了,直接先获取完,把获取到的结果传给排序的函数,,,,,,,,,,,,
回复 使用道具 举报
这是毕老师留的一个练习题目,修改完后的代码如下,感觉这块不是太熟悉,实现方法肯定有很多种,一会再发个帖子看看其他哥们都是怎样实现的。事实证明,东西是学到了,但是学习后没有进行总结,所以到用的时候不知道怎么用了,,,总结很重要,否则会很蛋疼。。。。。。现在就滚去写总结去。。。。。。:
  1. import java.util.*;

  2. class  Demo
  3. {
  4.         public static void sop(Object obj)
  5.         {
  6.                 System.out.println(obj);
  7.         }

  8.         public static void main(String[] args)
  9.         {
  10.                 String s = "vcz1bdAa+cs";
  11.                 s = toSort(s);
  12.                 sop(s);
  13.         }
  14.        


  15.         public static String toSort(String s)
  16.         {
  17.                         //将字符串变成字符数组
  18.                         char[] chr = new char[s.length()];
  19.                         chr = s.toCharArray();
  20.                         //对字符数组进行排序,使用选择排序。排序过程中判断字符是否是小写a-z之间的字符,如果不是,不排序,
  21.                         chr = clear(chr);
  22.                         sort(chr);
  23.                         //将数组变成字符串返回去。
  24.                         return String.valueOf(chr);
  25.         }

  26.         //对数组进行排序
  27.         public static void sort(char[] chr)
  28.         {
  29.                 for(int x = 0;x<chr.length;x++)
  30.                 {
  31.                         for(int y = x+1;y<chr.length;y++)
  32.                         {
  33.                                         if(chr[x]>chr[y])
  34.                                                         location(chr,x,y);
  35.                         }
  36.                 }
  37.         }
  38.        
  39.         //换位动作,确实做了,而且操作了数组中的元素,被数组记录了下来。
  40.         public static void location(char[] chr,int x,int y)
  41.         {
  42.                         char temp = chr[x];
  43.                         chr[x] = chr[y];
  44.                         chr[y] = temp;
  45.         }
  46.         public static char[] clear(char[] chr)
  47.         {
  48.                         StringBuilder sb = new StringBuilder();
  49.                         for(int x = 0;x<chr.length;x++)
  50.                         {
  51.                                         if((chr[x]>='a' && chr[x]<='z'))
  52.                                                         sb.append(chr[x]);
  53.                         }
  54.                         String s = sb.toString();
  55.                         return s.toCharArray();
  56.         }
  57. }
复制代码
回复 使用道具 举报
或者有哥们还在看这个帖子的话,告诉我你有几种实现的方法,哪一种好些??

题目:
/*
对字符串中字符进行自然顺序排序。

思路:
1,字符串变成字符数组。
2,对数组排序,选择,冒泡,Arrays.sort();
3,将排序后的数组变成字符串。

"vcz1bdAa+cs"-->abccdsvz
*/
回复 使用道具 举报
如果问题未解决,请继续追问,如果没有问题了,请将帖子分类 改为“已解决”,谢谢
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马