黑马程序员技术交流社区

标题: 毕老师13天中关于String的作业... [打印本页]

作者: 汪平乐    时间: 2013-2-18 20:40
标题: 毕老师13天中关于String的作业...
本帖最后由 汪平乐 于 2013-2-19 18:23 编辑

在毕老师视频中有这样的一道作业题:
"12 0 99 -7 30 4 100 13"
要求对字符串中的数值进行排序。生成一个数值从小到大新字符串。
"-7 0 4 12 13 30 99 100"

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

然后自己做了,发现自己的思路是4步完成的,所以找个高手把我的代码优化下或者是给我简单高效的代码学习{:soso_e181:}...
  1. class StringTest
  2. {
  3.         public static void main(String[] args)
  4.         {
  5.                
  6.                
  7.                 String s = "12 0 99 -7 30 4 100 13";
  8.                 sop("排序前:"+s);

  9.                 // 将字符串转换成整形数组
  10.                 int[] arr = transformInt(s);

  11.                 //对整形数组进行冒泡排序
  12.                 bubbleInt(arr);

  13.                 //将排序好的整形数组转换成字符数组
  14.                 String[] s1 = resultString(arr);

  15.                 //将字符数组变成字符串
  16.                 String s2 = getString(s1);
  17.                 sop("排序后:"+s2);

  18.         }
  19.         public static void sop(Object obj)
  20.         {
  21.                 System.out.println(obj);
  22.         }
  23.         
  24.         public static int[] transformInt(String str)
  25.         {
  26.                 String[] arr  = str.split(" ");
  27.                 int[] transform = new int[arr.length];
  28.                 for (int i = 0; i < arr.length; i++)
  29.                 {
  30.                    transform[i] =Integer.parseInt( arr[i] );                                    
  31.                 }
  32.                 return transform;
  33.         }

  34.         public static int[] bubbleInt(int[] transform)
  35.         {
  36.                 int temp =0;
  37.                 for (int x=0; x<transform.length-1 ; x++)
  38.                 {
  39.                         for (int y=0; y<transform.length-x-1 ; y++ )
  40.                         {
  41.                                 if (transform[y] > transform[y+1])
  42.                                 {

  43.                                         temp = transform[y];
  44.                                         transform[y] = transform[y+1];
  45.                                         transform[y+1] = temp;
  46.                                 }
  47.                         }
  48.                 }
  49.                 return transform;
  50.         }
  51.         
  52.         public static String[] resultString (int[] arr)
  53.         {
  54.                 String[] ss1 = new String[arr.length];
  55.                 for (int i = 0; i < arr.length; i++)
  56.                 {
  57.                         ss1[i] = String.valueOf( arr[i] );
  58.                     //System.out.println("s[" + i + "]=" + s[i]);           
  59.                 }
  60.                 return ss1;
  61.         }

  62.         public static String getString(String[] args)
  63.         {
  64.                 String ss2="";
  65.                 for(int i=0;i<args.length;i++)
  66.                 {        
  67.                           ss2+=(String)args[i] + " ";
  68.                 }        
  69.                 return ss2;
  70.         }
  71. }
复制代码

未命名.jpg (6.02 KB, 下载次数: 26)

未命名.jpg

作者: 夏振博    时间: 2013-2-18 22:48
本帖最后由 夏振博 于 2013-2-19 00:00 编辑
  1. import java.util.Arrays;

  2. public class Test {
  3.         public static void main(String[] args) {
  4.                 String s = "12 0 99 -7 30 4 100 13";
  5.                 System.out.println(s);//排序前
  6.                
  7.                 String[] strarr = s.split(" ");//分隔符进行分割,
  8.                 int [] arr = new int[strarr .length];
  9.                
  10.                 for (int x = 0;x<strarr .length;x++) {
  11.                         
  12.                         //因为字符串数组中的字符串为数值字符串,所以可以转换为int类型数值后再存进数组,方便排序
  13.                         arr[x] = Integer.parseInt(strarr [x]);
  14.                 }
  15.                 Arrays.sort(arr);//数组排序
  16.                
  17.                 String str = "";
  18.                 for (int i : arr) {
  19.                      //将int类型数值转换为字符串
  20.                      str += String.valueOf(i)+" ";
  21.                 }
  22.                 System.out.print(str);
  23.         }
  24. }
复制代码

作者: 陈丽莉    时间: 2013-2-19 11:35
觉得一楼答案满意不,还有问题欢迎及时回复,得到满意答案后,记得将帖子改为【已解决】,谢谢合作~
作者: 汪平乐    时间: 2013-2-19 18:20
夏振博 发表于 2013-2-18 22:48

漂亮,这就是差距....:handshake
作者: 汪平乐    时间: 2013-2-19 18:24
陈丽莉 发表于 2013-2-19 11:35
觉得一楼答案满意不,还有问题欢迎及时回复,得到满意答案后,记得将帖子改为【已解决】,谢谢合作~ ...

OK...:victory:
作者: 汪平乐    时间: 2013-2-19 23:36
夏振博 发表于 2013-2-18 22:48
  1. import java.util.Arrays;

  2. class Test13
  3. {
  4.         public static void sop(Object obj)
  5.         {       
  6.                 System.out.println(obj);
  7.         }
  8.         public static void main(String[] args)
  9.         {
  10.        
  11.                 //建立String 的字符串对象 str
  12.                 String s = "12  0 99 -7 30 4 100 13";
  13.                 System.out.println("排序前:" + s);
  14.                
  15.                 //转化成int型的数组
  16.                 String[] strarr = s.split(" ");
  17.                 int[] arr = new int[strarr.length];
  18.                 for (int x=0 ; x<strarr.length; x++ )
  19.                 {
  20.                         arr[x] = Integer.parseInt( strarr[x] );
  21.                 }

  22.                 //对int数组进行排序
  23.                 Arrays.sort(arr);

  24.                 //将排序的数组转变成String字符串并打印
  25.                  String str = "";
  26.          for (int i : arr)
  27.                  {
  28.               //将int类型数值转换为字符串
  29.               str += String.valueOf(i)+" ";
  30.          }
  31.           System.out.print("排序后" +str);
  32.         }
  33. }
复制代码
今天试着写写,结果出现NumberFormatException异常了,你帮我看看:handshake
作者: 汪平乐    时间: 2013-2-21 21:25
林明华 发表于 2013-2-21 20:54
String s = "12  0 99 -7 30 4 100 13";// 这行出问题了,12跟0之间多了个空格,
导致在for循环中 ,执 ...

收到,谢谢了...
作者: 付玉光    时间: 2013-2-25 16:06
果然都是高手!
作者: 聖手`书生    时间: 2013-4-17 13:29
夏振博 发表于 2013-2-18 22:48

这个方法有问题,最后得的字符串都加上空字符之后,得出的字符串最后一个角标是空格,和题目要求不符了。

Test.jpg (7.19 KB, 下载次数: 32)

Test.jpg

作者: 夏振博    时间: 2013-4-21 02:41
本帖最后由 夏振博 于 2013-4-21 02:55 编辑
聖手`书生 发表于 2013-4-17 13:29
这个方法有问题,最后得的字符串都加上空字符之后,得出的字符串最后一个角标是空格,和题目要求不符了。 ...

import java.util.Arrays;

public class Test {
        public static void main(String[] args) {
                String s = "12 0 99 -7 30 4 100 13";
                System.out.println(s);//排序前
               
                String[] strarr = s.split(" ");//分隔符进行分割,
                int [] arr = new int[strarr .length];
               
                for (int x = 0;x<strarr .length;x++) {
                        
                        //因为字符串数组中的字符串为数值字符串,所以可以转换为int类型数值后再存进数组,方便排序
                        arr[x] = Integer.parseInt(strarr [x]);
                }
                Arrays.sort(arr);//数组排序
               
                String str = "";
                for (int i : arr) {
                        if (i!=arr[arr.length-1]) {//加个判断就行了,不是数组最后一个就加空格,
                                //将int类型数值转换为字符串
                                str += String.valueOf(i)+" ";
                                        }else {
                                                str += String.valueOf(i);//如果是数组最后一个就把空格去掉
                                        }

                }
                System.out.print(str);
                //System.out.print(str.trim());//也可以直接调用String的去掉前后空格的方法,这样就不用上面的判断了
        }
}




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