定义接口或类 Shape,定义求周长的方法length()。 定义如下类,实现接口Shape或父类Shape的方法。 (1)三角形类Triangle (2)长方形类Rectangle (3)圆形类Circle等。 定义测试类ShapeTest,用Shape接口(或类)定义变量shape,用其指向不同类形的对象,输出各种图形的周长。并为其他的Shape接口实现类提供良好的扩展性。 提示: 计算圆周长时PI取3.14。 输入格式: 输入多组数值型数据(double); 一行中若有1个数,表示圆的半径; 一行中若有2个数(中间用空格间隔),表示长方形的长度、宽度。 一行中若有3个数(中间用空格间隔),表示三角形的三边的长度。(需要判断三个边长是否能构成三角形) 若输入数据中有0或负数,则不表示任何图形,周长为0。 输出格式: 行数与输入相对应,数值为根据每行输入数据求得的图形的周长。
时间: 2024-03-16 15:41:10 浏览: 56
下面是一个可能的解决方案:
```
import java.util.Scanner;
interface Shape {
double length(); // 计算周长的方法
}
class Triangle implements Shape {
private double a, b, c; // 三边长度
Triangle(double a, double b, double c) {
this.a = a;
this.b = b;
this.c = c;
}
public double length() {
if (a + b > c && a + c > b && b + c > a) { // 判断是否构成三角形
return a + b + c;
} else {
return 0;
}
}
}
class Rectangle implements Shape {
private double length, width; // 长度和宽度
Rectangle(double length, double width) {
this.length = length;
this.width = width;
}
public double length() {
return 2 * (length + width);
}
}
class Circle implements Shape {
private double radius; // 半径
Circle(double radius) {
this.radius = radius;
}
public double length() {
return 2 * 3.14 * radius;
}
}
public class ShapeTest {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
while (scanner.hasNext()) {
double a = scanner.nextDouble();
if (a <= 0) { // 不是任何图形
System.out.println(0);
} else if (scanner.hasNextDouble()) { // 长方形
double b = scanner.nextDouble();
if (b <= 0) { // 不是任何图形
System.out.println(0);
} else {
Shape shape = new Rectangle(a, b);
System.out.println(shape.length());
}
} else if (scanner.hasNextDouble()) { // 三角形
double b = scanner.nextDouble();
double c = scanner.nextDouble();
if (b <= 0 || c <= 0) { // 不是任何图形
System.out.println(0);
} else {
Shape shape = new Triangle(a, b, c);
System.out.println(shape.length());
}
} else { // 圆形
Shape shape = new Circle(a);
System.out.println(shape.length());
}
}
scanner.close();
}
}
```
这个程序首先定义了接口Shape,其中只有一个方法`length()`,表示计算周长。然后定义了三个类Triangle、Rectangle和Circle,它们分别实现了Shape接口,并实现了`length()`方法。在`Triangle`类中,我们需要判断三边长度是否能构成三角形;在`Circle`类中,我们使用了常数`3.14`作为圆周率。最后,在测试类`ShapeTest`中,我们使用了Scanner类来读入输入数据,并根据输入数据创建对应的图形对象,计算周长并输出。注意,如果输入数据不是任何图形,我们应该输出0。这个程序可以很容易地扩展,例如,如果我们要增加正方形类,只需要定义一个新的类,实现Shape接口,实现`length()`方法即可。
阅读全文