Java实现两个double类型数相除仅当分母非零时输出结果求助
问题排查与修改建议
原代码存在的核心问题
- 循环内定义的
denominator1是局部变量,作用域仅在do代码块内部,循环结束后就失效,完全没有修改外层用于计算的denominator变量 - 不管第一次输入的分母是否为0,do-while循环都会强制再提示用户输入一次分母,存在多余的重复交互
- 直接用
==判断double类型是否为0存在精度风险,浮点数运算或输入存在极小误差时可能出现判断失效
修改后可运行代码
import java.util.Scanner; public class DoubleDivision { public static void main(String[] args) { Scanner scan = new Scanner(System.in); System.out.println("Enter the first number that you want to divide: "); double numerator = scan.nextDouble(); double denominator; // 循环校验分母合法性 do { System.out.println("Enter the second number that you want to divide (cannot be 0): "); denominator = scan.nextDouble(); } while (Math.abs(denominator) < 1e-9); // 用绝对值判断避免浮点数精度问题 double fraction = numerator/denominator; System.out.println("The result of the division is: " + fraction); scan.close(); } }
修改点说明
- 删除了第一次多余的分母输入逻辑,仅在do-while循环内接收分母输入,避免重复提示
- 循环内直接给外层定义的
denominator变量赋值,输入的有效值可以直接被后续计算使用 - 用
Math.abs(denominator) < 1e-9替代直接==0判断,兼容浮点数精度场景,如果你确定只需要判断严格输入为0的场景,也可以替换回denominator == 0
内容的提问来源于stack exchange,提问作者Matteo Didonè
相关产品推荐
相关产品推荐

