Java异常处理练习_第1页
Java异常处理练习_第2页
Java异常处理练习_第3页
Java异常处理练习_第4页
Java异常处理练习_第5页
已阅读5页,还剩2页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第九章 异常在Java应用程序中,异常处理是保证程序正常、可靠运行的一个重要方面,在前边已经遇到了简单的异常处理。本章实验将主要针对程序中常用的异常的处理及异常的应用。9.1 实验一:异常处理及应用实验目的(1). 了解异常的基本概念、异常的的产生和异常处理的过程。 (2). 基本掌握异常在应用程序中的应用。实验要求编写应用程序,在程序中对常见的异常进行捕捉并作相应的处理。实验内容实验示例9.1.1 在上一章8.2.1的实验示例测试中,若没有输入答案或输入非数字字符,则在处理过程中会出现数据格式异常,修改实验示例8.2.1创建的Exercises类,添加捕获并处理异常的程序代码。实现该示例的步

2、骤如下: 简要分析根据题意,首先需要确定会产生异常的程序段,然后使用trycatch结构进行捕捉和处理异常地处理。由于主要处理数据格式异常,它由输入时的错误引起,所以,在处理异常时,就是返回到输入处,重新输入数据。 根据上述简要分析,给出如下修改后的参考程序代码(Exercise.java):/*这是一个小学生综合训练题测试的应用程序 *程序的名称:Exercise.java *程序中捕捉处理数据格式异常(NumberFormatException) */import java.awt.*;import java.awt.event.*;import java.util.*;import ja

3、vax.swing.*;public class Exercises extends StudentScreen implements ActionListener,KeyListener int count = 0; int n1=0,n2=0; int total=0; int right=0; long timenum=0; Random rand=new Random(); public Exercises(int total) this.total=total; num1.setText(""+rand.nextInt(100); num2.setText(&qu

4、ot;"+rand.nextInt(100); info.setText("测试题目数:"+total+"道"); answer.setEnabled(false); /在没开始答题之前,不得答题 start.addActionListener(this); next.addActionListener(this); next.addKeyListener(this); answer.addKeyListener(this); /*ActionListener接口方法实现*/ public void actionPerformed(Action

5、Event e) if(e.getSource()=start) start.setEnabled(false); /使开始按钮失效 answer.setEnabled(true); /开始答题 answer.requestFocus(); count=right=0; n1=rand.nextInt(100); n2=rand.nextInt(100); num1.setText(""+n1); num2.setText(""+n2); timenum=System.currentTimeMillis();else if(e.getSource()=n

6、ext) compute(); /调用compute()成员方法 /*KeyListener接口方法实现*/ public void keyPressed(KeyEvent e) /当按一个键时调用它 if(e.getKeyCode()!=e.VK_ENTER) return; /如果不是按了Enter键,则不处理 compute(); /调用compute()成员方法 public void keyReleased(KeyEvent ke) /当一个键被释放时调用它 /*当需要时,输入相关处理代码*/ public void keyTyped(KeyEvent ke) /当输入一个字符键时调

7、用它 /*当需要时,输入相关处理代码*/ /*成员方法设置运算符*/ public void setOperator() /设置运算符方法 if(n1>50&&n2>50) if(n1<n2)op.setText("+");/n1,n2>50,n1<n2进行加法运算 else op.setText("-") ; / n1>n2进行减法运算 else if(n1>50) if(n2>10) op.setText("-"); /n1>50,n2>10进行减法运算

8、else op.setText("/"); / n1>50,n2<10进行除法运算else if(n2>50) if(n1>10) op.setText("+"); /n2>50,n1>10进行加法运算 else op.setText("*"); /n2>50,n1<=10进行乘法运算else if(n1>n2&&n2<10) op.setText("/"); / n1>n2,n2<10进行除法运算else if(n1<1

9、0|n2<10) op.setText("*"); /n1<=10或n2<=10 进行乘法运算else op.setText("+"); /其他进行加法运算 /*成员方法:运算及答案处理*/ public void compute() float x=0; /定义变量try /本题正确结果的计算与实际答题结果的比较 if(op.getText().equals("+") x=n1+n2; else if(op.getText().equals("-") x=n1-n2; else if(op.ge

10、tText().equals("*") x=n1*n2; else if(op.getText().equals("/") x=n1/n2; if(x=Float.parseFloat(answer.getText() right+;catch(NumberFormatException e) JOptionPane.showMessageDialog(null,"数据格式错误,请重新输入数据!"); answer.requestFocus(); return; catch(Exception e1) JOptionPane.show

11、MessageDialog(null,e1.toString(); return; count+;if(count=total) /测试结束 JOptionPane.showMessageDialog(null,"总题目数"+total+"答对"+right+"道,花费时间"+(System.currentTimeMillis()-timenum)/1000+"秒!"); System.exit(0); n1=rand.nextInt(100)+1; /产生下一题 n2=rand.nextInt(100)+1; n

12、um1.setText(""+n1);num2.setText(""+n2);setOperator(); /设置运算符号answer.setText("");answer.requestFocus(); 编译Exercise.java程序,生成Exercise.class类文件,以供其他应用程序所用。 程序及分析在compute()方法中使用了trycatch结构捕捉并处理可能出现的数据格式异常 (NumberFormatException)和其他异常(Exception),当在结果栏中没有输入内容或输入非数字字符按“Enter”键

13、或单击“下一题”按钮时,获取结果栏中的字符串并将它转换为数值时会产生数据格式异常(NumberFormatException),处理的办法是使用对话框提示错误信息,并定位到结果栏让训练者重新输入题目答案。 编写测试程序,测试Exercise类的功能。测试程序代码如下:import javax.swing.*;public class TestExercises extends JFrame TestExercises() add(new Exercises(30); /选30道题进行训练 setVisible(true); pack(); setDefaultCloseOperation(3)

14、; public static void main(String args) new TestExercises(); 9-1a 选择测试题目数对话框 9-1b 答题屏幕界面 编译并运行测试程序,会出现如图9-1a的对话框,单击“开始”按钮,进入如图9-1b的答题界面,可以输入题目答案,然后按“Enter”或单击“下一题”按钮进入下一题,若在答题时没输入答案或输入非数字字符,则会出现如图9-1c的消息对话框,此时,可单击“确定”按钮,返回到应答栏,重新输入应答数据。最后在完成答题后,会出现如图9-1d的结果对话框。 9-1c 异常信息对话框 9-1d 结果信息对话框图9-2 实验示例屏幕界面自

15、由练习9.1 修改上一章自由练习8.1建立的输入学生信息程序,捕捉并处理当输入入学成绩时的数据错误。实验示例9.1.2 编写程序,实现如图9-2的用户界面,完成一个简单的计算器应用程序。要求:可以进行+、=、*、/四种运算;为了操作方便,输入运算数后按“Enter”键连续进行下一数运算,并保留用鼠标单击“下一个”按钮连续进行下一数运算;并要求输入的运算数在01000之间。按“清零”按钮,结束当前的运算过程,开始一个新的运算。实现该示例的步骤如下: 简要分析和实验示例类似,使用awt和swing的组件(JLabel、JTextField、JPanel、JBurron等)构建用户界面。实现Acti

16、onListener接口完成按钮的功能;建立一个继承KeyAdapter适配器类的内部类KeyPressListener,在类中重写 keyPressed()方法完成按键功能的实现,同样只需关注“Enter”键。为保证输入的运算数在01000之间,可以使用自定义异常实现,对输入01000之外的数据将视为数据超界。 根据上述简要分析,给出如下参考程序代码。首先给出自定义异常类:class DefException extends Exception DefException() /构造方法 super("数据超界错误!"); public String toString()

17、/返回信息方法 return "数据超界错误!要求数字范围01000之间!" 计算器应用程序代码如下:/*这是一个简单的计算器应用程序 *程序的名称:Calculator.java */import java.util.*;import java.awt.*;import java.awt.event.*;import javax.swing.*;public class Calculator extends JFrame implements ActionListener float f1=0; float f2=0; JLabel num1=new JLabel(&qu

18、ot;"); Choice op=new Choice(); JTextField num2=new JTextField(10); JLabel result=new JLabel(); JButton ok = new JButton("下一个"); JButton next = new JButton("清零"); JButton exit = new JButton("退出");JPanel jp1=new JPanel();JPanel jp2=new JPanel();public Calculator() th

19、is.setTitle("简单计算器应用"); this.setLayout(new GridLayout(3,1); this.add(new JLabel("请选择运算并输入运算数:"); op.add("+"); op.add("-"); op.add("*"); op.add("/"); jp1.add(num1); jp1.add(op); jp1.add(num2); jp1.add(result); jp2.add(ok); jp2.add(next); jp2

20、.add(exit); this.add(jp1); this.add(jp2); ok.addActionListener(this); /委托监听对象 ok.addKeyListener(new KeyPressListener(); / op.addKeyListener(new KeyPressListener();/ num2.addKeyListener(new KeyPressListener();/ next.addActionListener(this); /委托监听对象 exit.addActionListener(this); this.pack(); this.setV

21、isible(true); this.setDefaultCloseOperation(this.EXIT_ON_CLOSE); num2.requestFocus();/*判断数据是否合法*/public boolean isNumber() throws DefException try f2=Float.parseFloat(num2.getText(); /获取运算数 catch(NumberFormatException e) JOptionPane.showMessageDialog(null,"数据格式错误,请重新输入数据!"); num2.requestFo

22、cus(); return false; catch(Exception e1) JOptionPane.showMessageDialog(null,e1.toString(); return false; if(f2<=0|f2>1000) throw new DefException(); return true;/*成员方法:运算处理*/public void compute() try if(!isNumber() num2.requestFocus(); return; catch(DefException e2) /处理自定义异常 JOptionPane.showMe

23、ssageDialog(null,e2.toString(); num2.requestFocus(); return; switch (op.getSelectedIndex() case 0: f1=f1+f2; break; case 1: f1=f1-f2; break; case 2: f1=f1*f2; break; case 3: f1=f1/f2; break; num1.setText(""+f1); result.setText(" = "+f1); num2.setText(""); op.requestFocu

24、s();/*ActionListener接口方法*/public void actionPerformed(ActionEvent e) if(e.getSource()=ok) compute(); /执行成员方法,继续下一数运算 else if(e.getSource()=next) /清零,开始新的运算 f1=0; num1.setText(""); num2.setText(""); result.setText(""); op.select(0); num1.requestFocus(); else if(e.getSource()=exit) this.dispose(); /结束程序/*添加内部类KeyPressListener*/class KeyPressListener extends KeyAdapter public void keyPressed(KeyEvent e) /键盘按下事件 if(e.getKeyCode()!=e.VK_EN

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论