【案例问题】
- 案例描述
平面三角形有三个属性:三条边的长度(假设称为 sideA, sideB, sideC)。为了简化问
题的处理,我们假设三边长度均为整型,且 sideA<=sideB<=sideC。同时,三角形的边
长必须满足以下要求:两边之和应大于第三边的长度。
要求编写一个三角形类 Triangle,能够:
输出三角形的三边的长度;
设置三边长度,并进行合法性检测,如果不合法则抛出自定义异常表示三角形参
数不合法;
提供方法判断两个三角形是否相等——判断一致的标准两个三角形的三边都分
别对应相等。即 aa, bb, c==c。
- 运行结果
【案例目标】
• 学会分析“三角形”程序设计的实现思路。
• 根据思路独立完成“三角形”程序设计的源代码编写、编译及运行。
• 掌握 Object 类的知识。
• 掌握 Java 异常处理。
【案例分析】
Object 类是所有类的父类,也就是说 Java 的所有类都继承了 Object,子类可以使
用 Object 的所有方法。
Object 类位于 java. lang 包中,编译时会自动导入,我们创建一个类时,如果没有
明确继承一个父类,那么它就会自动继承 Object,成为 Object 的子类。
1、创建一个表示平面三角形的类 Triangle。
该类有 3 个私有整型属性: sideA, sideB, sideC,分别代表三边的长度。
该类的方法有:
void setSides (int sideA, int sideB, int sideC) 方法,用于设置三边。如
果参数不合法,则创建自定义异常类对象,并将其抛出。因此,这个方法声明时
还需要声明抛出自定义异常。
三个属性的 getter 方法;
重写上表中 Object 父类的 equals (Object obj)方法,用于判断两个三角形是否相等。提示:需要对 obj 对象进行强制类型转换,然后才能访问三角形的属性和
方法。
重写上表中 Object 父类的 toString ()方法用于返回格式为“ (*, *, )”字符串,
其中是边长。
最后两个重写方法要注意:重写时访问权限不能降低;方法参数列表须与父类一致。
2、编写自定义异常类。
该类继承自 Exception。
有一个构造方法(String s),它调用 super(s)方法用于初始化异常信息。
3、编写演示类。在主方法中依次:
创建三个三角形对象 t1,t2 和 t3。
t1 和 t2 对象分别调用 setSides 方法设置三边之长,分别为(3,4,5)和(6,8,10)。
输出三边长度信息(通过对象 toString 方法返回的字符串)。
输出 t1 和 t2 是否相等(利用 equals 方法判断)
t3 对象调用 setSides 方法设置三边之长(1,2,8)。
上述代码中,调用 setSides 方法可能抛出产生异常,可以将上述代码放在 try 语句
块。
在 catch 语句块中,打印异常对象的 getMessage()返回的字符串,实现输出“三角形
参数不合法”的功能。
打印演示结束的内容,可以放在 finally 语句块中。
【运行代码】
1
package cn.edu.gpnu.bank.Triangle;
public class Triangle {
private int sideA;
private int sideB;
private int sideC;
public String name;
@Override
public boolean equals(Object obj) {
if (this == obj) return true;
if (obj == null || getClass() != obj.getClass()) return false;
Triangle triangle = (Triangle) obj;
return sideA == triangle.sideA && sideB == triangle.sideB && sideC == triangle.sideC;
}
@Override
public String toString() {
return this.name+"("+ sideA +","+ sideB +","+ sideC +
')';
}
public void setSides(int sideA, int sideB, int sideC) throws Exception{
this.sideA = sideA;
this.sideB = sideB;
this.sideC = sideC;
if (sideA + sideB <= sideC || sideA + sideC <= sideB) {
throw new Exception("三角形参数不合法");
}
}
public Triangle() {
}
public int getSideA() {
return sideA;
}
public int getSideB() {
return sideB;
}
public int getSideC() {
return sideC;
}
}
package cn.edu.gpnu.bank.Triangle;
class Exceptinos extends Exception{
public String s;
public Exceptinos(String s) {
this.s = s;
}
public Exceptinos(String message, String s) {
super(message);
this.s = s;
}
}
package cn.edu.gpnu.bank.Triangle;
public class TriangleTest {
public static void main(String[] args){
Triangle t1= new Triangle();
Triangle t2= new Triangle();
Triangle t3= new Triangle();
try {
t1.setSides(3, 4, 5);
t2.setSides(6, 8, 10);
}
catch(Exception e){
System.out.println(e.getMessage());
}
t1.name ="三角形1";
t2.name ="三角形2";
System.out.println("三角形1 等于 三角形2:"+t1.equals(t2));
System.out.println(t1.toString());
System.out.println(t2.toString());
try {
t3.setSides(1, 2, 8);
}
catch(Exception e){
System.out.println(e.getMessage());
}
}
}
【运行结果】