Skip to content

Commit cb74827

Browse files
author
Yang Bo
committed
fix lab06
1 parent 2748d45 commit cb74827

File tree

2 files changed

+30
-29
lines changed

2 files changed

+30
-29
lines changed

labs/lab05/README.md

+13-12
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,11 @@
22
======
33

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

77
# 学习目标
88
完成本实验后,你应该能够:
9-
- 创建一个程序,通过文本形式和用户交互
9+
- 创建一个程序,通过命令行方式和用户交互
1010
- 实现和抛出一个定制的异常
1111
- 使用try/catch块健壮地处理异常
1212

@@ -15,7 +15,7 @@
1515

1616
# 用户交互
1717

18-
用户输入的每一行都被解释位潜在的表达式,有效的表达式由一个,两个或者三个符号(token)组成,每个符号和前面的符号之间用一个空格分隔,可能的形式如下:
18+
用户输入的每一行都被解释为一个潜在的表达式,有效的表达式由一个,两个或者三个符号(token)组成,每个符号和前面的符号之间用一个空格分隔,可能的形式如下:
1919
- 1个符号:[**quit**],程序退出
2020
- 2个符号:[**UOP N**],其中N是一个整数,并且UOP是一个单元操作符(-),程序显示给定整数的负数表示
2121
- 3个符号:[**N1 BOP N2**],其中N1和N2是整数,BOP是一个二元操作符(+,-,*,/,或者%),程序显示对两个操作数按照指定操作符进行计算后的结果。
@@ -45,23 +45,24 @@ Illegal argument.
4545
Illegal argument.
4646
32 ^ baz
4747
Illegal argument.
48-
foobar * 3
48+
foobar ^ 3
4949
Illegal argument.
5050
4 / 0
51-
Illegal argument.
5251
Divide by zero error.
52+
42 % 0
53+
Mod by zero error.
5354
-4
5455
Illegal input.
5556
- 4
56-
Illegal input.
57+
The result is: -4.
5758
QUIT
5859
Exit.
5960
```
6061

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

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

6667
![UML Design](images/uml_design.png)
6768

@@ -72,19 +73,19 @@ Exit.
7273
```
7374
该方法:
7475

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

80-
*compute()*方法负责解释符号组并生成结果
81+
*compute()*方法负责解释符号集并生成结果
8182

8283
```java
8384
public static int compute(String[] tokens) throws CalculatorException
8485
```
85-
如果是由两个或者三个符号组成的有效表达式,那么该方法就返回整型结果。对于所有其它情况,该方法抛出一个*CalculatorException*,它将错误字符串编码在*Exception**message*属性中。如果仅有一个符号输入,且这个符号和字符串"quit"相等(不论大小写),例外的*quit*标记就会被设置为*true*例外消息的细节请参考我们给出的骨架代码
86+
如果是由两个或者三个符号组成的有效表达式,那么该方法就返回整型结果。对于所有其它情况,该方法抛出一个*CalculatorException*,它将错误字符串编码在*Exception**message*属性中。如果仅有一个符号输入,且这个符号和字符串"quit"相等(不论大小写),异常对象的*quit*标记就会被设置为*true*关于异常消息的细节请参考我们给出的骨架代码
8687

87-
你必须实现你自己的*CalculatorTest*单元测试类,我们给出了CalculatorSampleTest类,提示你如何测试例外
88+
你必须实现你自己的*CalculatorTest*单元测试类,我们给出了CalculatorSampleTest类,提示你如何测试异常
8889

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

@@ -109,5 +110,5 @@ Exit.
109110

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

labs/lab06/README.md

+17-17
Original file line numberDiff line numberDiff line change
@@ -2,27 +2,27 @@
22
======
33

44
# 介绍
5-
在本实验中,你将通过使用抽象类和接口来实验Java继承。延续实验2的游戏主题,你将实现一组用于表示不同类型库存项(inventory of items)的类。另外,你将实现Item对象的比较,即便它们是不同类型的Item。
5+
在本实验中,你将通过使用抽象类和接口来体验Java继承。延续实验2的游戏主题,你将实现一组用于表示不同类型库存项(inventory of items)的类。另外,你将实现Item对象的比较,即便它们是不同类型的Item。
66

77
# 学习目标
88
完成本实验后,你应该能够:
99
1. 创建并扩展抽象类和方法
10-
2. 用接口为多各类定义标准行为
10+
2. 用接口在多个类间定义标准行为
1111

1212
# 准备
13-
在你的eclipse工作区总导入已有的[lab6](lab6.zip)实现
13+
在你的eclipse工作区中导入已有的[lab6](lab6.zip)实现
1414

1515
# 库存项类设计
16-
下面的UML表示库存和各种类型库存项的对应的类,你的任务是实现这些类,并实现响应的单元测试代码。需要实现的类和方法在UML中以粗体字表示
16+
下面的UML表示库存和各种类型库存项的对应的类,你的任务是实现这些类,并实现相应的单元测试代码。需要你实现的类和方法在UML中以粗体字表示
1717

1818
![uml design](images/uml_design.png)
1919

20-
以斜体表示的类时抽象类或者接口。具体的子类必须实现抽象父类的所有方法。在本实验中,**Item****Consumable****Weapon**是抽象类。
20+
以斜体表示的类是抽象类或者接口。具体的子类必须实现抽象父类的所有方法。在本实验中,**Item****Consumable****Weapon**是抽象类。
2121

22-
**Item****Comparable**的线表示**Item**必须实现**Comparable**接口。类似的,**ItemWeightComparator**类必须实现**ItemComparator**接口该接口继承**Comparator**接口。**ItemWeightComparator**根据高度比较不同的库存项。
22+
**Item****Comparable**的线表示**Item**必须实现**Comparable**接口。类似的,**ItemWeightComparator**类必须实现**ItemComparator**接口该接口继承**Comparator**接口**ItemWeightComparator**根据高度比较不同的库存项。
2323

2424
# 实验步骤
25-
**Item**类时游戏中存在的所有类型库存项的公共祖先
25+
**Item**类是游戏中存在的所有类型库存项的公共祖先
2626

2727
- 所有的**Item**实例都有一个唯一的整型*id*,由**Item**构造函数赋值,第一个item实例赋予*id*=0,下一个赋予1,依次类推。注意你可以利用提供的类变量来方便你实现构造函数(还有一个静态的*reset()*,方便你写单元测试)。
2828
- *compareTo(Item other)***Item**类实现**Comparable**接口,你需要为类添加*compareTo(Item other)方法。*compareTo(Item other)方法接受另外一个**Item**实例作为参数,并和当前实例进行比较。如果当前实例的*value*字段大于*other的value*字段,那么方法就应该返回一个正整数(惯例是1)。如果当前实例的*value*字段小于*other的value*字段,那么方法就应该返回一个负整数(惯例是-1)。如果两者相等,就以items的name的字符串序进行比较(相当于比较字符串的每个字符,忽略大小写,例如A == a),返回恰当的值。*提示:你可以利用String类API本身提供的功能*
@@ -31,21 +31,21 @@
3131
ring -- Value: 3000, Weight: 0.01
3232
```
3333

34-
**ItemWeightComparator**类实现**ItemComparator**接口,意思是该类的实例可以被传递给需要**Item**类型comparator的方法
34+
**ItemWeightComparator**类实现**ItemComparator**接口,意思是该类的实例可以被传递给需要类型为**Item**的comparator的方法
3535

3636
- **ItemWeightComparator***compare(Item first, Item second)方法的功能和**Item**类的*compareTo(Item other)方法类似,但是比较的是**Items***weight*字段,如果weights是相等的,该方法应该调用*第一个* **Item***compareTo(Item other)*方法并返回结果值。
3737

38-
**Weapon**类是**Item**的一个抽象实现,它表示使用后可以造成伤害和损坏的项目。该类的实现已经提供给你。所有的**Weapon**实例有一个基准伤害值*baseDamage*和一个修正值*damageModifier*。这两个值的和决定了该武器使用后所能造成的*有效伤害*。另外,**Weapons**有一个基准牢固度值*baseDurability*,和一个对应的修正值*durabilityModifier*。这两个值的和决定了**Weapon**的有效牢固度。当改值降到零或更少,有效牢固度就是零,该武器被认为是坏了且无法再使用。
38+
**Weapon**类是**Item**的一个抽象实现,它表示使用后可以造成伤害和损坏的项目。该类的实现已经提供给你。所有的**Weapon**实例有一个基准伤害值*baseDamage*和一个修正值*damageModifier*。这两个值的和决定了该武器使用后所能造成的*有效伤害*。另外,**Weapons**有一个基准牢固度值*baseDurability*,和一个对应的修正值*durabilityModifier*。这两个值的和决定了**Weapon**的有效牢固度。当该值降到零或更少,有效牢固度就是零,该武器被认为是坏了且无法再使用。
3939

4040
我们提供了几个已实现的方法,包括:
4141

4242
- *Weapon.getDamage()*:返回**Weapon**的有效伤害
4343
- *Weapon.getDurability()*:返回**Weapon**的有效牢固度
44-
- *Weapon.toString()*对于一个*name*是"hammer",*value*是300,*weight*是2.032,*baseDamage*值是30.4219,*damageModifier*值是0.05,*baseDurability*值是0.7893,*durabilityModifier*为0.05的一个**Weapon**,方法将返回如下格式的字符串:
44+
- *Weapon.toString()*对于*name*是"hammer",*value*是300,*weight*是2.032,*baseDamage*值是30.4219,*damageModifier*值是0.05,*baseDurability*值是0.7893,*durabilityModifier*为0.05的一个**Weapon**,方法将返回如下格式的字符串:
4545
```
4646
hammer -- Value: 300, Weight: 2.03, Damage: 30.47, Durability: 83.93%
4747
```
48-
- *Weapon.use()*:该方法返回一个字符串,描述党一个**Weapon**被使用时,会发生什么。对于一个名为"hammer"的**Weapon**,有效伤害30.4725,方法返回如下:
48+
- *Weapon.use()*:该方法返回一个字符串,描述当一个**Weapon**被使用时,会发生什么。对于一个名为"hammer"的**Weapon**,有效伤害30.4725,方法返回如下:
4949
```
5050
You use the hammer, dealing 30.47 points of damage.
5151
```
@@ -62,13 +62,13 @@ You can't use the hammer, it is broken.
6262

6363
**Sword**类是**Weapon**的一个具体实现,你必须提供:
6464
- Sword类的所有实例的*name*是"sword"
65-
- *Sword.polish()*:每次该方法被调用时,该方法将实例的**damageModifier**增加*Weapon.MODIFIER_CHANGE_RATE*,直到*baseDamage*值的25%。如果一个sword的基准伤害要到100,那么最大有效伤害能够增加到125。
65+
- *Sword.polish()*:每次该方法被调用时,该方法将实例的**damageModifier**增加*Weapon.MODIFIER_CHANGE_RATE*,直到*baseDamage*值的25%。如果一个sword的基准伤害到100,那么最大有效伤害能够增加到125。
6666

67-
**Bow**类是**Weapon**类的具体实现,你必须提供:s
68-
- Bow类的所有实例必须命名为"bow"
69-
- *Bow.polish()*:该方法将实例的**durabilityModifier**增加*Weapon.MODIFIER_CHANGE_RATE*所有的更改都被限制以使**有效牢固度"不会大于1。
67+
**Bow**类是**Weapon**类的具体实现,你必须提供:
68+
- Bow类的所有实例的*name*"bow"
69+
- *Bow.polish()*:该方法将实例的**durabilityModifier**增加*Weapon.MODIFIER_CHANGE_RATE*更改将被限制以使**有效牢固度"不会大于1。
7070

71-
和实现2非常类似**Inventory**在游戏中是items的容器。该类已近被部分实现,但你需要添加如下方法:
71+
和实验2非常类似**Inventory**在游戏中是items的容器。该类已经被部分实现,但你需要添加如下方法:
7272
- *Inventory.sort()*:根据*值value***Inventory**实例中的items进行排序
7373
- *Inventory.sort(ItemComparator comparator)*:根据*高度weight***Inventory**实例中的items进行排序。
7474

@@ -90,7 +90,7 @@ You eat the bread.
9090
You feel sick.
9191
```
9292

93-
# 特定步骤
93+
# 具体说明
9494
从lab6.zip提供的类文件开始
9595
1. 修改**Item****Consumable****Inventory**
9696
2. 创建**Sword****Bow****ItemWeightComparator**

0 commit comments

Comments
 (0)