黑马程序员技术交流社区

标题: 字符排序 [打印本页]

作者: 记得上线    时间: 2012-7-8 16:57
标题: 字符排序
/*
对字符串中的字符进行自然排序
思路
1 把字符串变成字符数组
2 对数组进行排序。
*/
class StringTest4
{
public static void main(String[] args)
{
  String str="12 0 99 -1 -6";
  
}
public static String paixu(String str)
{
  char[] ch=str.toCharArray();
  //System.out.println(ch[]);
  char ch1=ch.arr();
  copyValueOf(ch1);
  System.out.println();//这个地方我想打印一下排序后的字符数组,请问怎么写。
}
public static Array arr(char[] arr1)
{
  
  for(int x=0;x<arr1.length-2;x++)
  {
   for(int y=x+1;y<(arr1.length-1);y++)
   {
    if(arr1[x]>arr1(y))
    {
     char temp=arr1[x];
     arr1[x]=arr1[y];
     arr1[y]=temp;
    }
   }
  }
  return arr1[];

}
}
//报错 [img]file:///C:/Documents%20and%20Settings/Administrator/Application%20Data/Tencent/Users/619034576/QQ/WinTemp/RichOle/I7GRIOT_X3@%U{5NUW[B6`T.jpg[/img]

作者: 记得上线    时间: 2012-7-8 16:58
报错截图为

I7GRIOT_X3@%U{5NUW[B6`T.jpg (12.11 KB, 下载次数: 24)

I7GRIOT_X3@%U{5NUW[B6`T.jpg

作者: 康大玮    时间: 2012-7-8 17:11
package day7_8;

/*
对字符串中的字符进行自然排序
思路
1 把字符串变成字符数组
2 对数组进行排序。
*/
class StringTest4 {
        public static void main(String[] args) {
                String str = "12 0 99 -1 -6";
         paixu(str);
        }

        public static String paixu(String str) {
                char[] ch = str.toCharArray();
                 System.out.println(ch);
                char[] ch1 = arr(ch);
               
                System.out.println(ch1);// 这个地方我想打印一下排序后的字符数组,请问怎么写。
                return "";
        }

        public static char[] arr(char[] arr1)
{
  
  for(int x=0;x<arr1.length-2;x++)
  {
   for(int y=x+1;y<(arr1.length-1);y++)
   {
    if(arr1[x]>arr1[y])
    {
     char temp=arr1[x];
     arr1[x]=arr1[y];
     arr1[y]=temp;
    }
   }
  }
  return arr1;

}
}

但是 排序结果不对

12 0 99 -1 -6
    --0112996
作者: 康大玮    时间: 2012-7-8 17:12
char[] ch = str.toCharArray();  这句 不好 ?

这是  第几天得视频?
作者: 记得上线    时间: 2012-7-8 17:28
这是课件,课上没讲。
char[] ch = str.toCharArray();  //        如果是这个的问题的话应该不止只报这个错,后面好多都用到了ch。
       
作者: 董深义    时间: 2012-7-8 17:50
class StringTest4
{
public static void main(String[] args)
{
  String str="12 0 99 -1 -6";
  paixu(str);
}
public static void paixu(String str)
{
  char[] ch=str.toCharArray();//String.ToCharArray()方法作用:将字符串拆分为字符到数组。12 0 99 -1 -6转化后是一个一个含有13个字符的字符数组
  System.out.println(ch.length);//运行结果为13
  char[] ch1=arr(ch);
  System.out.println(ch1);//数组是可以直接输出打印的,也可以自己写个函数,调用一下
}
  public static char[] arr(char[] arr1)//楼主的选择算法也写错了,for语句的比较长度少了一次x<arr1.length-1;y<(arr1.length)
{
   for(int x=0;x<arr1.length-1;x++)
  {
   for(int y=x+1;y<(arr1.length);y++)
   {
    if(arr1[x]>arr1[y])
    {
     char temp=arr1[x];
     arr1[x]=arr1[y];
     arr1[y]=temp;
    }
   }
  }
  return arr1;
}
}


作者: 黄丽慧    时间: 2012-7-8 18:22
本帖最后由 黄丽慧 于 2012-7-8 18:45 编辑

楼主,你好像有点太粗心了额,你贴出来的这段代码有不少错误的地方,再仔细地看看改一下吧,要不编译肯定通不过的。
class StringTest4
{
public static void main(String[] args)//这里是主函数,可是却没有调用任何的方法,只定义了一个字符串变量,肯定是没有办法达到排序的功能啦
{
  String str="12 0 99 -1 -6";
//这里应该调用排序的方法,paixu(str);
}
public static String paixu(String str)
{
  char[] ch=str.toCharArray();
  //System.out.println(ch[]);
  char ch1=ch.arr();
  copyValueOf(ch1);//这个程序中根本就没有copyValueOf方法,调用时肯定会出错的,这个地方楼主是想实现什么功能啊
  System.out.println();//楼主这里如果想打印排序好的字符数组,有两种办法,调用数组的toString方法,变成字符串输出,另外一种是用for循环输出
}
public static Array arr(char[] arr1)//楼主是想返回一个字符数组吧?这样返回是错误的Array不是一个类型啊,应该改成这样的
public static char[] arr(char[] arr1)

{
  
  for(int x=0;x<arr1.length-2;x++)
  {
   for(int y=x+1;y<(arr1.length-1);y++)//这里的y<(arr1.length-1)不需要括号的
   {
    if(arr1[x]>arr1(y))
    {
     char temp=arr1[x];
     arr1[x]=arr1[y];
     arr1[y]=temp;
    }
   }
  }
  return arr1[];//

}
}
楼主我有个地方不太明白,你给的字符串是由数字组成的吧,数字跟数字之间是不是用空格隔开的,数字有两位数也有负数?如果是这样的话,
单纯地将字符串转换成字符数组再去排序是肯定达不到效果的。我觉得要解决问题的话应该用ArrayList容器来存储,然后再对元素进行比较大小。





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