例题:键盘输入数字字符串(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("输入的是字母!");
}
}
}
}
}