黑马程序员技术交流社区

标题: 自写_字符串小程序,多多指教 [打印本页]

作者: 聖手`书生    时间: 2013-4-16 19:02
标题: 自写_字符串小程序,多多指教
本帖最后由 聖手`书生 于 2013-4-17 09:04 编辑
  1. //需求:对字符串中字符进行自然顺序排序。

  2. class  StringTest4
  3. {
  4.         public static String reverseString(String s)
  5.         {
  6.                 //字符串变数组
  7.                 char[] chs = s.toCharArray();
  8.                
  9.                 //对数组按自然顺序排序
  10.                 bubbleSort(chs);

  11.                 //数组变成字符串
  12.                 return new String(chs);//我自己写的,但是这点有疑惑,为啥不能返回String(shs),而是要new一下才能编译通过呢
  13.         }
  14.         
  15.         public static void bubbleSort(char[] arr)
  16.         {
  17.                 for(int x=0;x<arr.length-1;x++)
  18.                 {
  19.                         for(int y=0;y<arr.length-x-1;y++)
  20.                         {
  21.                                 if(arr[y]>arr[y+1])
  22.                                 
  23.                                 swap(arr,y,y+1);
  24.                         }
  25.                 }
  26.         }
  27.         public static void swap(char[] arr,int a,int b )
  28.         {
  29.                 char temp = arr[a];
  30.                 arr[a]= arr[b];
  31.                 arr[b]= temp;
  32.         }
  33.         
  34.         
  35.         
  36.         public static void sop(String str)
  37.         {
  38.                 System.out.println(str);
  39.         }
  40.         
  41.         public static void main(String[] args)
  42.         {
  43.                 String s ="abcedf";
  44.                 sop("("+reverseString(s)+")");
  45.         }
  46. }
复制代码

作者: _王涛    时间: 2013-4-16 19:47
你程序的第46行错了,应该改成 StringTest.reverseString(s)
静态嘛,用类名打点调用就行了
作者: 聖手`书生    时间: 2013-4-16 20:44
_王涛 发表于 2013-4-16 19:47
你程序的第46行错了,应该改成 StringTest.reverseString(s)
静态嘛,用类名打点调用就行了 ...

帅哥,我这是调用本类函数,又没有访问外部类,不需要你说的这个类名调用吧
作者: _王涛    时间: 2013-4-16 20:59
哦sorry
public class Test {
public static String reverseString(String s){
    char[] chs=s.toCharArray();
  bubbleSort(chs);
   return new String(chs);
}
public static void bubbleSort(char[] arr)
        {
                for(int x=0;x<arr.length-1;x++)
               {
                    for(int y=0;y<arr.length-x-1;y++)
                     {
                     if(arr[y]>arr[y+1])
                   swap(arr,y,y+1);
                       }
               }
        }
       public static void swap(char[] arr,int a,int b )
        {
              char temp = arr[a];
               arr[a]= arr[b];
               arr[b]= temp;
       }
public static void main(String[] args) {
   String s ="abcedf";
      System.out.print("("+reverseString(s)+")");
}
}
结果是----------》(abcdef),不对吗?

作者: 聖手`书生    时间: 2013-4-16 21:01
_王涛 发表于 2013-4-16 20:59
哦sorry
public class Test {
public static String reverseString(String s){

结果是对的,我现在问的问题是为啥要返回的是  return new String(chs);  而不能return String(chs)
作者: _王涛    时间: 2013-4-16 21:08
本帖最后由 _王涛 于 2013-4-16 21:09 编辑

String也是一个类啊,你利用的是它的构造函数传参,构造函数创建对象new String(chs) ,其返回对应字符串。
如果直接String(chs)的话肯定不行了,如果是 return String.copyValueOf(chs);到还可以。




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