Java编程:动态计算长方形、正方形、三角形面积
5星 · 超过95%的资源 需积分: 43 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("输入错误,请确保输入数字!");
}
}
}
```
这个改进的版本包含了完整的形状面积计算逻辑,并在用户输入不合法时给出错误提示。现在,程序可以根据用户输入计算正方形、长方形和三角形的面积。
点击了解资源详情
点击了解资源详情
点击了解资源详情
2013-11-23 上传
2012-08-30 上传
2021-05-08 上传
2020-12-21 上传
2021-02-20 上传
2021-11-28 上传
kuangxue21
- 粉丝: 6
- 资源: 10
最新资源
- MATLAB实现小波阈值去噪:Visushrink硬软算法对比
- 易语言实现画板图像缩放功能教程
- 大模型推荐系统: 优化算法与模型压缩技术
- Stancy: 静态文件驱动的简单RESTful API与前端框架集成
- 掌握Java全文搜索:深入Apache Lucene开源系统
- 19计应19田超的Python7-1试题整理
- 易语言实现多线程网络时间同步源码解析
- 人工智能大模型学习与实践指南
- 掌握Markdown:从基础到高级技巧解析
- JS-PizzaStore: JS应用程序模拟披萨递送服务
- CAMV开源XML编辑器:编辑、验证、设计及架构工具集
- 医学免疫学情景化自动生成考题系统
- 易语言实现多语言界面编程教程
- MATLAB实现16种回归算法在数据挖掘中的应用
- ***内容构建指南:深入HTML与LaTeX
- Python实现维基百科“历史上的今天”数据抓取教程