黑马程序员技术交流社区

标题: 代码出现异常,帮忙解决... [打印本页]

作者: 汪平乐    时间: 2013-2-19 23:30
标题: 代码出现异常,帮忙解决...
本帖最后由 汪平乐 于 2013-2-20 12:07 编辑
  1. import java.util.Arrays;

  2. class BiStringTest13
  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. }
复制代码
在代码arr[x] = Integer.parseInt( strarr[x] );这句出现了NumberFormatException
异常,但strarr[]自己定义成String类型了,为什么还会出现字符串不能转换为适当格式呢?

未命名.jpg (25.11 KB, 下载次数: 27)

未命名.jpg

作者: 夏振博    时间: 2013-2-19 23:51
本帖最后由 夏振博 于 2013-3-13 00:40 编辑

{:soso_e188:}
作者: qq646742615    时间: 2013-2-19 23:51
有个 空格 不能转换成Integer类型 你好像打了两个空格
作者: 胡发友    时间: 2013-2-20 08:44
各位,要测试呀,不是靠自己想的是什么样,就是什么样的,

1、按照上面两位的回答,是第21行:   arr[x] = Integer.parseInt( strarr[x] );出了问题,说是parseInt方法里多加了两个空格,
      但是我要说的是,parseInt它只是转换strarr[x]这个值,跟外面的空格根本就不相干,
2、那现在我把这行注释掉,重新编译,运行的结果是:[12, , 0, 99, -7, 30, 4, 100, 13],大家看到没,切割后的数组元素是这样,
     第二个元素是空,也就是说,在进行切割时,没有把空格切完,所以导致了,在进行paseInt解析时报了异常,因为parseInt不能接           收空值;   .NumberFormatException: For input string: ""提示的也是这样提示的;
3、我把切割的条件该成了:    String[] strarr = s.split(" +");,表示可以切一个或多个空格;
4、重新编译,运行的结果:E:\work\day01>java BiStringTest13                                            排序前:12  0 99 -7 30 4 100 13
                                           转换成数组后:  [12, 0, 99, -7, 30, 4, 100, 13]
                                             排序后-7 0 4 12 13 30 99 100
修改后的代码为:


import java.util.Arrays;

class BiStringTest13
{
        public static void sop(Object obj)
        {        
                System.out.println(obj);
        }
        public static void main(String[] args)
        {

                //建立String 的字符串对象 str
                String s = "12  0 99 -7 30 4 100 13";//这行的12与0之间多敲了一个空格;
                System.out.println("排序前:" + s);

                //转化成int型的数组
                String[] strarr = s.split(" +");//把这里稍微修改,就Ok;
               
                int[] arr = new int[strarr.length];
                for (int x=0 ; x<strarr.length; x++ )
                {
                       arr[x] = Integer.parseInt( strarr[x] );
                }

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

                //将排序的数组转变成String字符串并打印
                 String str = "";
         for (int i : arr)
                 {
              //将int类型数值转换为字符串
              str += String.valueOf(i)+" ";
         }
          System.out.print("排序后" +str);
        }
}

作者: 汪平乐    时间: 2013-2-20 12:07
收到了,自己不仔细只看27行了,没看,谢谢各位大侠!
作者: 朱玉玺    时间: 2013-2-20 21:55
所以,切的时候,最好像板凳一样,用正则表达式,




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