Java编程:动态计算长方形、正方形、三角形面积
![](https://csdnimg.cn/release/wenkucmsfe/public/img/starY.0159711c.png)
该编程任务要求设计一个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("输入错误,请确保输入数字!");
}
}
}
```
这个改进的版本包含了完整的形状面积计算逻辑,并在用户输入不合法时给出错误提示。现在,程序可以根据用户输入计算正方形、长方形和三角形的面积。
![](https://profile-avatar.csdnimg.cn/b8a9e39a33ea4793b8b0260ccddfe167_kuangxue21.jpg!1)
kuangxue21
- 粉丝: 6
最新资源
- 杰斯珀·佩特森React投资组合项目剖析
- 压缩包子文件中提取的衣衣数据包
- 掌握CSS投影技术:Welcome-To-Projection教程
- 循环垂直输送机设计文档分析与应用
- VXML语音交互技术演示及源码工具分享
- Andrea Goldsmith《无线通信》课后习题答案解析
- Mybatis逆向工程所需的全部jar包及其版本
- VB实现单像空间后方交会方法及数据处理
- 我的食谱应用开发指南
- 彩妆摇摇笔设计装置文档介绍
- 2014年11月手机号码归属地数据库文件详解
- StackJIT-Rust: 基于Rust的堆栈虚拟机项目介绍
- Office 2003简版:Word、Excel、PPT三合一
- 德国出品!Windows XP终极安全优化补丁
- Hibernate框架演示:深入理解与实践
- TAdvStringGrid v4.5控件:最新版本功能特性介绍