Java中如何用Scanner实现选择图形并计算面积的功能?
解决Scanner分支判断问题,实现多图形面积计算
你的问题核心是没有根据用户选择的图形类型做分支逻辑判断,导致代码始终执行矩形的计算流程。下面是完整的实现思路和代码示例:
实现步骤
- 先打印图形选择菜单,引导用户输入对应选项
- 通过
Scanner接收用户的选择值,用switch或if-else做分支判断 - 不同分支下,接收对应图形的参数(比如矩形要长和宽,圆形要半径,正方形要边长)
- 调用对应图形类的setter设置参数,执行
calculateArea()计算并输出结果 - 最后关闭
Scanner资源
完整代码示例
假设你已经有以下图形类(仅核心方法示意):
// 矩形类 class Rectangle { private double length; private double width; public void setLength(double length) { this.length = length; } public void setWidth(double width) { this.width = width; } public double calculateArea() { return length * width; } } // 圆形类 class Circle { private double radius; private static final double PI = Math.PI; public void setRadius(double radius) { this.radius = radius; } public double calculateArea() { return PI * radius * radius; } } // 正方形类 class Square { private double side; public void setSide(double side) { this.side = side; } public double calculateArea() { return side * side; } }
主程序的Scanner逻辑实现:
import java.util.Scanner; public class AreaCalculator { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); // 打印选择菜单 System.out.println("请选择要计算面积的图形:"); System.out.println("1. 矩形"); System.out.println("2. 圆形"); System.out.println("3. 正方形"); System.out.print("输入选项编号:"); // 接收用户选择 int choice = scanner.nextInt(); // 根据选择执行对应逻辑 switch (choice) { case 1: // 矩形逻辑 System.out.print("输入矩形的长:"); double length = scanner.nextDouble(); System.out.print("输入矩形的宽:"); double width = scanner.nextDouble(); Rectangle rect = new Rectangle(); rect.setLength(length); rect.setWidth(width); System.out.printf("矩形面积:%.2f%n", rect.calculateArea()); break; case 2: // 圆形逻辑 System.out.print("输入圆形的半径:"); double radius = scanner.nextDouble(); Circle circle = new Circle(); circle.setRadius(radius); System.out.printf("圆形面积:%.2f%n", circle.calculateArea()); break; case 3: // 正方形逻辑 System.out.print("输入正方形的边长:"); double side = scanner.nextDouble(); Square square = new Square(); square.setSide(side); System.out.printf("正方形面积:%.2f%n", square.calculateArea()); break; default: System.out.println("无效的选项,请重新运行程序选择正确编号"); } // 关闭Scanner scanner.close(); } }
关键注意点
- 必须用分支语句(
switch或if-else)区分不同图形的逻辑,这是你之前代码缺失的核心部分 - 每次接收参数后要对应实例化图形类,调用setter后再计算面积
- 可以添加输入验证(比如判断输入的参数是否为正数),避免非法值导致计算错误
内容的提问来源于stack exchange,提问作者Alpay
相关产品推荐
相关产品推荐

