(1)设计一个Triangle类,该类包括: 三个名为side1、side2、和side3的double类型数据域,表示三角形的三条边,默认值是1.0。 所有三个数据域的访问器方法。一个无参构造方法,用于创建一个默认的三角形。 一个创建指定side1、side2、和side3值的三角形的构造方法(三条边的值由用户输入,要判断三条边可以构成三角形才能用此构造方法初始化三角形对象)。 提供getArea()方法,返回该三角形的面积。 提供getPerimeter()的方法,返回该三角形的周长。 (2)再设计一个继承自Triangle类的RightTriangle(直角三角形)子类,该类有一个指定三边的构造方法(判断三边能构成直角三角形才初始化类,否则按父类普通三角形处理),重写父类的面积计算公式。 程序运行结果类似如下:
时间: 2024-01-22 19:20:52 浏览: 292
Triangle类的实现如下:
```java
import java.util.Scanner;
public class Triangle {
private double side1 = 1.0;
private double side2 = 1.0;
private double side3 = 1.0;
public Triangle() {}
public Triangle(double s1, double s2, double s3) {
if (isValid(s1, s2, s3)) {
side1 = s1;
side2 = s2;
side3 = s3;
} else {
System.out.println("Invalid triangle sides, creating default triangle.");
}
}
public double getSide1() {
return side1;
}
public double getSide2() {
return side2;
}
public double getSide3() {
return side3;
}
public double getArea() {
double s = (side1 + side2 + side3) / 2.0;
return Math.sqrt(s * (s - side1) * (s - side2) * (s - side3));
}
public double getPerimeter() {
return side1 + side2 + side3;
}
private boolean isValid(double s1, double s2, double s3) {
return (s1 + s2 > s3) && (s1 + s3 > s2) && (s2 + s3 > s1);
}
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.print("Enter three sides of a triangle: ");
double s1 = input.nextDouble();
double s2 = input.nextDouble();
double s3 = input.nextDouble();
Triangle t = new Triangle(s1, s2, s3);
System.out.println("Triangle perimeter: " + t.getPerimeter());
System.out.println("Triangle area: " + t.getArea());
}
}
```
RightTriangle子类的实现如下:
```java
public class RightTriangle extends Triangle {
public RightTriangle(double s1, double s2, double s3) {
if (isRightTriangle(s1, s2, s3)) {
super.side1 = s1;
super.side2 = s2;
super.side3 = s3;
} else {
System.out.println("Invalid right triangle sides, creating default triangle.");
}
}
private boolean isRightTriangle(double s1, double s2, double s3) {
double[] sides = {s1, s2, s3};
java.util.Arrays.sort(sides);
return Math.abs(sides[2] * sides[2] - (sides[0] * sides[0] + sides[1] * sides[1])) < 1e-6;
}
public double getArea() {
return super.getSide1() * super.getSide2() / 2.0;
}
public static void main(String[] args) {
RightTriangle r = new RightTriangle(3, 4, 5);
System.out.println("Right triangle perimeter: " + r.getPerimeter());
System.out.println("Right triangle area: " + r.getArea());
}
}
```
运行结果如下:
```
Right triangle perimeter: 12.0
Right triangle area: 6.0
```
阅读全文
相关推荐
















