}//end goto10_8() method 
//-------------------------------- 
//输入字符 
public void enter() 
{if(Refresh==true) 
//如果已经设置了 运算符则在下一次输入数据的时候要把以前lab的内容清除掉 
{lab.setText("0"); number=0; Refresh=false;} 
if(lab.getText().charAt(0)=='0'&& lab.getText().length()==1) 
//如果lab的内容为0则,lab的内容将被所输入的字符代替,否则直接在lab的内容后面加上所输入的字符 
{lab.setText(Character.toString(ch)); number++;} 
else 
if(number<length) 
{number++;lab.setText(lab.getText()+ch);} 
}//end enter() method 
//------------------------------------- 
//用来处理按了运算符后的计算- 
public void js() throws This_number_too_big //指定由method抛出异常 
{if (mark=='n') //没有运算符 
{mark=ch; //,则设置运算符为刚刚输入的字符, 
data=Double.parseDouble(lab.getText());//则设置运算数据为lab的值 
Refresh=true;//则设置下一次输入的时候要刷新lab 
} 
else //如果采用的是连续运算(即没有使用‘=’号)则运行下面的语句 
{switch (mark) //根据运算符计算结果,并把结果保存到data 
{ case '+': data+=Double.parseDouble(lab.getText()); break; 
case '-': data-=Double.parseDouble(lab.getText()); break; 
case '*': data*=Double.parseDouble(lab.getText()); break; 
case '/': data/=Double.parseDouble(lab.getText()); break;} 
lab.setText(Double.toString(data)); //显示运算结果 
mark=ch;//设置运算符为刚刚按下的运算符 
Refresh=true;//则设置下一次输入的时候要刷新lab 
number=lab.getText().length();//设置输入的字符个数 
// System.out.println(lab.getText());//用来调试用的 
if (data>Double.MAX_VALUE) 
//如果data超过double类型的最大值则抛出自定义的一个异常类 
{throw new This_number_too_big(); } 
} 
}//end js() method 
//--------------------------- 
// 
public void answer() throws This_number_too_big //指定由method抛出异常 
{if (mark=='n') 
{} 
else 
{switch (mark) 
{case '+': data+=Double.parseDouble(lab.getText()); break; 
case '-': data-=Double.parseDouble(lab.getText()); break; 
case '*': data*=Double.parseDouble(lab.getText()); break; 
case '/': data/=Double.parseDouble(lab.getText()); break;} 
lab.setText(Double.toString(data)); 
mark='n';} 
if (data>Double.MAX_VALUE) //如果data超过double类型的最大值则抛出自定义的一个异常类 
{throw new This_number_too_big();} 
Refresh=false; 
number=lab.getText().length(); 
}//end answer() method 
//--------------------------- 
}//end class Jsp2003 
4. 测试分析 
(1)程序运行情况: 
程序正常的响应按钮事件,输入的数值长度受变量length的限定,进行混合四则运算的时候,结果如果不是很大,可以正常显示,但如果结果很大,就可能采用科学记数方式,这样带来了进制转换时的麻烦,需要特殊的处理科学记数里的E ,当结果太大的时候,有可能超出可能表示的最大值,(结果溢出),这个时候就要对结果进行必要的异常处理,我在输出结果的方法内设置if 语句,如果结果大于某一个值就抛出一个This_number_too_big 类型的类,再使用try-catch,捕捉输出结果的方法抛出的异常对象。然后进行,重制归零的处理。 
(2)程序异常处理: 
当结果超出Double.MAX_VALUE时,将抛出一个This_number_too_big 类的异常对象,这个是我自定义的一个异常类它继承自Exception 类,然后使用try-catch去捕捉这个异常,异常的处理如下: 
try 
{ js();} 
catch(This_number_too_big e) 
{ 
lab.setText("0"); 
number=0; 
mark='n'; 
Refresh=false; 
System.out.println("The number is too big"); 
} //如果出现异常则初始化效果如同clear键 
五、参考文献
上一页 [1] [2] [3] [4] [5] [6] [7]