Java圆面积计算程序重复输出结果问题求助
问题排查与解决方案
嘿,我来帮你搞定这个重复输出的问题!咱们先看看问题出在哪:
你的circleArea方法里已经通过System.out.println("The area: "+area);打印了一次面积结果,而在main方法中,你又执行了System.out.println("area: " +circleArea(r,p,ac));——这里调用circleArea会触发方法内部的打印,同时你还把方法返回的面积值再次打印了一遍,自然就出现了重复输出的情况。
修正方案:遵循单一职责原则
推荐让circleArea只负责计算面积+输入验证,把打印逻辑统一放到main方法里,这样代码更清晰也避免重复输出。下面是修正后的完整代码:
import java.util.Scanner; public class Question1 { // 该方法仅负责计算面积和验证输入,不处理打印 public static double circleArea(double radius, double pi) { // 验证输入是否合法 if(radius <= 0) { return -1; // 用-1作为输入无效的标记值 } // 合法则计算并返回面积 return pi * radius * radius; } public static void main(String[] args) { Scanner input = new Scanner(System.in); System.out.print("Enter radius: "); // 用print让输入和提示在同一行,更友好 int r = input.nextInt(); final double p = 3.142d; double areaResult = circleArea(r, p); // 根据方法返回值判断输出内容 if(areaResult == -1) { System.out.println("Error: Radius must be a positive non-zero value."); } else { System.out.println("The area: " + areaResult); } input.close(); // 记得关闭Scanner资源,避免泄漏 } }
关键修改点说明
- 简化
circleArea方法参数:不需要传入area(方法内部可直接计算),只保留必要的radius和pi - 移除方法内部的打印语句:让方法专注于计算和验证,符合单一职责设计原则
- 统一打印逻辑到
main:通过判断方法返回的标记值,只打印一次结果,彻底解决重复输出问题 - 优化用户体验:用
System.out.print替代println,让输入与提示在同一行 - 资源管理:新增
input.close(),避免Scanner资源泄漏
另一种可选方案(保留方法内打印)
如果你更倾向于让circleArea处理打印逻辑,那只需要在main里调用方法但不打印返回值即可:
import java.util.Scanner; public class Question1 { public static double circleArea(double radius, double pi) { double area = pi * radius * radius; if(radius <= 0) { System.out.println("Error: Radius must be a positive non-zero value."); return 0; } else { System.out.println("The area: " + area); return area; } } public static void main(String[] args) { Scanner input = new Scanner(System.in); System.out.print("Enter radius: "); int r = input.nextInt(); final double p = 3.142d; // 仅调用方法,不打印返回值 circleArea(r, p); input.close(); } }
内容的提问来源于stack exchange,提问作者fawwaaz
相关产品推荐
相关产品推荐

