BigInteger、BigDecimal、Integer 和 异常(Exception)

例题:键盘输入数字字符串(String),然后通过 int number = Integer.parseInt(numberStr); 将String转换成int类型。

这个转换过程可能出现异常: 1.parseInt()不能存入字母。

                                                     2.parseInt()不能存入小数。

                                                     3.int类型 不能存很长很长的整型。

1.用BigIntger 对象 存 数字字符串 :判断是否可以成功创建BigIntger 对象,如果创建成功,说明异常原因是因为数字 字符串太长了。如果又抛出异常了,那么说明不是因为字符串太长了。

 2.用BigDecimal对象存数字字符串:判断是否可以创建 BigDecimal对象,如果创建成功,说明异常原因是 输入的是 小数,如果不能创建成功,那么就说明是 输入了字母。

package cn.demo.main;

import java.math.BigDecimal;
import java.math.BigInteger;
import java.util.Scanner;

public class Main {

	public static void main(String[] args) {
		//键盘输入一个数字字符串,然后判断是否是整数(int)。 
		Scanner scr = new Scanner(System.in);
		System.out.println("输入一个数字字符串:");
		String numberStr = scr.next() ;
		//将数字字符串(String)转换成整型(int)。
		
		/*
		 * BigInteger 大整型 , BigDecimal 大小数。
		 */
		
		/*
		 * int number = Integer.parseInt(numberStr); 
		 * 出现错误的原因: 1.numberStr长度太长了。2.存入的是小数。3.存入的是字母。
		 * 
		 * BigInteger bg = new BigInteger(numberStr);
		 * 出现错误的原因: 1.存入的是小数。 2.存入的是字母。
		 * 
		 * BigDecimal bd = new BigDecimal(numberStr);
		 * 出现错误的原因: 1.存入的是字母。
		 * 
		 * 
		 * 这样一步步的嵌套判断就可以找到最终的错误了:
		 * 			try{
		 * 				 Integer......
		 * 			}catch(Exception e1){   //先判断是不是 因为 存入的字符串长度太长 导致的 抛出异常。
		 * 				 try{
         *                     BigInteger......  
		 * 				    }catch(Exception e2){  //再判断是不是因为 存入的是小数 导致的抛出异常。
		 * 						try{
		 * 							BigDecimal......		
		 * 						   }catch(Exception e3){  //最后判断是不是因为 存入的是字母 导致的抛出异常 。
		 * 			
		 * 						   }
		 * 					}
		 * 			}
		 */
		
		try {
			int number = Integer.parseInt(numberStr);
			System.out.println(Integer.toBinaryString(number));
		} catch (NumberFormatException e) {
			/*
			 * int number = Integer.parseInt(numberStr);可能出错。
			 * 错误1:numberStr的长度太长了,超出了int类型的存储范围,
			 * 可以用BigInteger来存储试一下,而且BigInteger ,只能存储整形,
			 * 不能存储小数和字母。
			 */
			try {
				BigInteger bg = new BigInteger(numberStr); //如果numberStr字符串可以存储进BigIntger对象中。说明上面的错误出现的原因是:字符串的长度太长了,转换成整形,int无法全部存储了。
				//如果BigInteger bg = new BigInteger(numberStr); 成功定义了,那么就不会报异常,就会继续执行下面的Syso语句。
				System.out.println("长度太长了!");
				//如果BigInteger bg = new BigInteger(numberStr); 没有成功定义了,那么就报异常。
			} catch (Exception e1) {
				//如果BigInteger抛出异常了,那么int number = Integer.parseInt(numberStr);出现异常的原因就不是因为字符串太长了。
				//BigDecimal 只能存 小数,不能存字母 。
				//首先试一下能不能创建BigDecimal对象成功,如果成功了,说明错误的原因是 输入存入的 是 小数 。 
				try {
					BigDecimal bd = new BigDecimal(numberStr);
					System.out.println("输入的是小数!");
				} catch (Exception e2) {
					//如果是BigDecimal对象没有创建成功,所以不是存入小数的原因,所以是 存入字母的原因了。
					System.out.println("输入的是字母!");
				}
			}
		}
	}
}

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值