需求:编写一个除法程序,要求除数和被除数都从键盘中输入。如果输入的被除数是一个非数值型,如6y,
则不需要输入除数程序就自动中断并抛出NumberFormatException异常,
如果输入的除数为0则抛出ArithmeticException异常。并用finally处理最终结果。
/**
* 需求:编写一个除法程序,要求除数和被除数都从键盘中输入。如果输入的被除数是一个非数值型,如6y,
* 则不需要输入除数程序就自动中断并抛出NumberFormatException异常,如果输入的除数为0
* 则抛出ArithmeticException异常。并用finally处理最终结果。*/
import java.util.*;
class Chufa
{
double b;
String a;
public void setnum()throws NumberFormatException,ArithmeticException
{
Scanner reader=new Scanner(System.in);
System.out.println("请输入被除数:");
a=reader.next();//将a以字符串类型输入,并通过check方法判断,非数值型。
if(check(a))//如果为真,则继续输入,如果为假,则抛出NumberFormatException
{
try
{
Scanner reader2=new Scanner(System.in);
System.out.println("请输入除数");
b=reader2.nextDouble();
if(b==0)
throw new ArithmeticException("除数不能为0");
}
catch(NumberFormatException e)
{
System.out.println(e.toString());
}
}
else
throw new NumberFormatException("被除数格式不正确");
}
public void fangfa()
{
double end, s;
s=Double.valueOf(a).doubleValue();//将字符串转成double计算
end=s/b; //注意Double.valueOf是返回一个Double对象,
System.out.println("结果为:"+end);//你还要再调用doubleValue()方法得到基本double类型,
//或调用floatValue()得到基本float类型。
}
public boolean check(String str)
{
char c;
for(int i=0;i<str.length();i++)//遍历字符串中的每个字符,通过限制1~9来控制真假判断
{
c=str.charAt(i);
if(!(c>='0'&&c<='9'))
return false;
}
return true;
}
}
public class NumberExceptionDemo
{
public static void main(String[] args) throws NumberFormatException
{
Chufa cc=new Chufa();
try
{
cc.setnum();
cc.fangfa();
}
catch(ArithmeticException e)
{
System.out.println(e.toString());
}
finally
{
System.out.println("Over");
}
}
}
输出结果如下: