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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 王月 中级黑马   /  2012-7-18 11:39  /  4566 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 王月 于 2012-7-18 16:33 编辑

Integer.parseInt("234df")这句话会引起 java.lang.NumberFormatException这样一个运行时异常,
而Integer.parseInt("2347589436783657834")也会引起这样的异常。


我用了自定义异常,为什么输入两种错误的值只运抓住了NumberFormatException这个异常,怎么分类处理这些异常呢 ,就是输入非法字符是一个异常,输入超出int范围的值时又是一个异常。
        public static int getConversion(String str) {
                int i = 0;

                try {
               
                        //        i = Integer.parseInt(str);
                        if(Integer.parseInt(str)<Integer.MAX_VALUE){
                                i = Integer.parseInt(str);
                        }
                        if(Integer.parseInt(str)>Integer.MAX_VALUE)
                        {
                                throw new yuejieException();
                        }
                        
                } catch (yuejieException n) {

                        System.out.println("数值太大,超出范围");
                }
                catch (NumberFormatException n) {

                        System.out.println("输入有误,含有非数字字符");
                }

                return i;

评分

参与人数 1技术分 +1 收起 理由
韦念欣 + 1 赞一个!

查看全部评分

5 个回复

倒序浏览
                                               
                                           int x = 0;
                        try
                        {
                                x = Integer.parseInt(s);
                        }
                        catch (Exception e) //把需要处理的不同情况放到catch语句里面
                        {
                                char[] chs = s.toCharArray();
                                if(chs.length==0)
                                        System.out.println("没有任何内容!");
                                else if(chs[0]=='-')
                                {
                                        for(int j=1;j<chs.length;j++)
                                        {
                                                if (chs[j] < '0' || chs[j] > '9')
                                                {
                                                        System.out.println("有非数字字符情况!");
                                                        break;
                                                }
                                                if (j == chs.length - 1)
                                                        System.out.println("数字位数太大了!");
                                        }
                                }
                                else
                                {
                                        for (int i = 0; i < chs.length; i++)
                                        {
                                                if (chs < '0' || chs > '9')
                                                {
                                                        System.out.println("有非数字字符情况!");
                                                        break;
                                                }
                                                if (i == chs.length - 1)
                                                        System.out.println("数字太大了!");
                                        }
                                }
                        }
回复 使用道具 举报
主要是int类型的取值范围的原因
1、首先把str转换为long型 与Integer.MAX_VALUE比较 要不然 还没有比较转换过程中就会报错了
2、在你的这程序中 改变一下 try语句块中的两个if判断语句块顺序   
修改程序如下:
public class Test {
         public static int getConversion(String str) {
         int i = 0;

         try {
         
                 //        i = Integer.parseInt(str);
               
                 if(Long.parseLong(str)>Integer.MAX_VALUE)
                 {
                         throw new yuejieException();
                 }
                 if(Integer.parseInt(str)<Integer.MAX_VALUE){
                     i = Integer.parseInt(str);
             }
         } catch (yuejieException n) {

                 System.out.println("输入有误,");
         }
         catch (NumberFormatException n) {

                 System.out.println("输入有误,含有非数字字符");
         }

         return i;
         }
       
}

评分

参与人数 1技术分 +1 收起 理由
韦念欣 + 1 赞一个!

查看全部评分

回复 使用道具 举报
李伟 发表于 2012-7-18 11:47
int x =  ...

这样做可以成功,我是想如果用处理异常的方式是不是更严谨一点。
我是用了一个if语句的判断和一个异常,来处理那两种错误的方式的。
回复 使用道具 举报
孙新强 发表于 2012-7-18 12:01
主要是int类型的取值范围的原因
1、首先把str转换为long型 与Integer.MAX_VALUE比较 要不然 还没有比较转换 ...

已经解决了,三克油
回复 使用道具 举报

高手,佩服!!!相当精辟啊!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马