Java编程:动态计算长方形、正方形、三角形面积

5星 · 超过95%的资源 需积分: 43 67 下载量 126 浏览量 更新于2024-11-10 8 收藏 3KB TXT 举报
该编程任务要求设计一个Java程序,能够根据用户输入的命令行参数数量来计算长方形、正方形和三角形的面积。如果用户输入一个参数,程序应假设计算的是正方形;两个参数代表长方形;三个参数则表示要计算三角形的面积。如果没有参数,程序应通过异常处理显示错误消息。设计中建议使用面向对象的方法,定义一个抽象的父类`Shape`,包含一个抽象方法`area()`,然后为每个形状(正方形、长方形、三角形)创建子类并重写`area()`方法。在`main`方法中利用多态调用这些子类的方法来计算不同形状的面积。 代码部分展示了类结构的初步实现,包括`Shape`抽象类以及`Square`、`Lsquare`(长方形)和`Triangle`(三角形)三个子类。每个子类都有一个`area`方法,但当前实现中都只是打印希腊字母"ε",并未实际计算面积。在`main`方法中,程序提示用户输入形状类型(1代表正方形,2代表长方形,3代表三角形),然后读取相应的参数并根据用户选择创建对应的形状对象,调用`area`方法计算面积。 为了完善这个程序,我们需要在每个子类的`area`方法中进行如下修改: 1. `Square`类:`area`方法应接收一个整数参数代表边长,计算面积为边长的平方。 2. `Lsquare`(长方形)类:`area`方法应接收两个整数参数代表长和宽,计算面积为长乘以宽。 3. `Triangle`(三角形)类:`area`方法应接收三个整数参数代表三条边长,首先计算半周长`s = (a + b + c) / 2`,然后使用海伦公式计算面积为`Math.sqrt(s * (s - a) * (s - b) * (s - c))`。 在`main`方法中,还需要正确地传递参数给`area`方法,并捕获可能的`IOException`和`NumberFormatException`,确保程序在用户输入无效时能优雅地处理错误。 改进后的代码示例如下: ```java import java.io.BufferedReader; import java.io.InputStreamReader; abstract class Shape { abstract void area(int... sides); } class Square extends Shape { void area(int side) { System.out.println(side * side); } } class Rectangle extends Shape { void area(int length, int width) { System.out.println(length * width); } } class Triangle extends Shape { void area(int a, int b, int c) { int s = (a + b + c) / 2; System.out.println(Math.sqrt(s * (s - a) * (s - b) * (s - c))); } } public class Test { public static void main(String[] args) { int[] inputSides = new int[3]; try (BufferedReader cin = new BufferedReader(new InputStreamReader(System.in))) { while (true) { System.out.println("请输入形状类型(1-正方形,2-长方形,3-三角形):"); String inputType = cin.readLine(); int num = Integer.parseInt(inputType); switch (num) { case 1: Square square = new Square(); System.out.println("请输入正方形的边长:"); String sideInput = cin.readLine(); inputSides[0] = Integer.parseInt(sideInput); square.area(inputSides[0]); break; case 2: Rectangle rectangle = new Rectangle(); System.out.println("请输入长方形的长和宽:"); String[] rectInputs = cin.readLine().split(" "); inputSides[0] = Integer.parseInt(rectInputs[0]); inputSides[1] = Integer.parseInt(rectInputs[1]); rectangle.area(inputSides[0], inputSides[1]); break; case 3: Triangle triangle = new Triangle(); System.out.println("请输入三角形的三边长:"); String[] triInputs = cin.readLine().split(" "); inputSides[0] = Integer.parseInt(triInputs[0]); inputSides[1] = Integer.parseInt(triInputs[1]); inputSides[2] = Integer.parseInt(triInputs[2]); triangle.area(inputSides[0], inputSides[1], inputSides[2]); break; default: System.out.println("输入错误,请重新输入!"); break; } } } catch (IOException | NumberFormatException e) { System.err.println("输入错误,请确保输入数字!"); } } } ``` 这个改进的版本包含了完整的形状面积计算逻辑,并在用户输入不合法时给出错误提示。现在,程序可以根据用户输入计算正方形、长方形和三角形的面积。