Skip to content

Latest commit

 

History

History
114 lines (88 loc) · 4.8 KB

File metadata and controls

114 lines (88 loc) · 4.8 KB

实验五:异常

介绍

本实验关注异常(Exception)的使用,异常用于捕捉各种可能出现的错误,让你的程序采取恰当的纠正性动作。在本实验中,你将实现一个简单的计算器程序,该程序允许用户指定一个操作符和最多两个操作数(参数)。你的程序将解析这些输入,执行操作并打印结果。过程中如果有错误出现,你的程序将捕获错误,并且给用户提供恰当的反馈信息。

学习目标

完成本实验后,你应该能够:

  • 创建一个程序,通过命令行方式和用户交互
  • 实现和抛出一个定制的异常
  • 使用try/catch块健壮地处理异常

准备

下载lab5实验的部分实现

用户交互

用户输入的每一行都被解释为一个潜在的表达式,有效的表达式由一个,两个或者三个符号(token)组成,每个符号和前面的符号之间用一个空格分隔,可能的形式如下:

  • 1个符号:[quit],程序退出
  • 2个符号:[UOP N],其中N是一个整数,并且UOP是一个单元操作符(-),程序显示给定整数的负数表示
  • 3个符号:[N1 BOP N2],其中N1和N2是整数,BOP是一个二元操作符(+,-,*,/,或者%),程序显示对两个操作数按照指定操作符进行计算后的结果。

如果输入非法,或者格式不正确,则显示特定的错误消息。

下面是和用户的一个交互样例,用户输入和程序响应都输出了:

4 + 2
The result is: 6
42+7
Illegal input.
4 - 2
The result is 2
4 / 2
The result is 2
4 % 2
The result is 0
foo + 2
Illegal argument.
42 * 3
The result is: 126
42 * bar
Illegal argument.
42 ^ 3
Illegal argument.
32 ^ baz
Illegal argument.
foobar ^ 3
Illegal argument.
4 / 0
Divide by zero error.
42 % 0
Mod by zero error.
-4
Illegal input.
- 4
The result is: -4.
QUIT
Exit.

类设计

下面是你要在实验中实现的类的UML表示,请按图命名你的实例变量和方法名。在该图中,你看到引入了新的UML标记:带箭头的虚线表示类之间有某种松散的关系。它不是is-a关系(类继承),也不是has-a关系(一个类或者变量引用另外一个类),而是表明一个类的局部变量引用了另外一个类。

Exception类是由Java API提供的,CalculatorException继承自Exception,增加了一个称为quit的实例变量。该标记表明程序应当终止。该类提供两个不同的构造函数:一个允许调用方设置quit标记;另外一个将quit标记设置缺省值false

UML Design

Calculator类提供了两个方法,下面的方法以一个字符串作为参数,该字符串被解释为一个表达式:

    public static boolean parseAndCompute(String input)

该方法:

  1. 将字符串分割为一组符号(通过空格分割)
  2. 调用*compute()*评估表达式
  3. 打印出结果或者一个错误消息
  4. 返回一个表明程序是否应该终止的布尔值

*compute()*方法负责解释符号集并生成结果:

    public static int compute(String[] tokens) throws CalculatorException

如果是由两个或者三个符号组成的有效表达式,那么该方法就返回整型结果。对于所有其它情况,该方法抛出一个CalculatorException,它将错误字符串编码在Exceptionmessage属性中。如果仅有一个符号输入,且这个符号和字符串"quit"相等(不论大小写),异常对象的quit标记就会被设置为true。关于异常消息的细节请参考我们给出的骨架代码。

你必须实现你自己的CalculatorTest单元测试类,我们给出了CalculatorSampleTest类,提示你如何测试异常。

提供的Driver类负责打开用户输入流,重复读取和评估输入行,直到接收到quit指令。

实现步骤

  1. 完成CalculatorException类的实现
  2. 完成Calculator类的实现
  3. 实现对Calculator类的单元测试

最后步骤

使用Eclipse生成Javadoc

  • 选择Project/Generate Javadoc...
  • 确保你的项目被选中,包括所有的Java文件
  • 选择Private可见性
  • 使用缺省的目标目录
  • 点击Finish

步骤2

在Eclipse或者你常用的浏览器中打开lab5/doc/index.html文件。 确保Javadoc中包含你的类,所有的方法包含必要的Javadoc文档。

提示

  • Exceptionmessage属性应该被用于编码错误消息,
  • 用一个catch语句捕获所有的Exceptions不是一个好的编程实践(除非你确实是要捕获所有的异常)。相反,你应该仅捕获你预期发生的特定异常,这样,其它未预期的异常仍然会造成程序终止,方便你进一步排查问题。