Java净收入计算捕获负值异常后如何重启计算流程
问题原因
你当前的代码无法实现重算需求,核心有两个错误:
- 没有循环控制逻辑:Java代码默认是从上到下线性执行的,你没有写任何让执行流回到输入步骤的逻辑,就算判断出净收入为负,打印完提示还是会继续向下执行,直接输出负的计算结果。
- try-catch使用逻辑完全错误:try-catch是用来捕获代码运行时抛出的异常的,你写的try块里只有一行打印提示的代码,不存在任何会抛出异常的逻辑,catch块永远不会被触发,根本无法实现流程回退的效果。另外你的原代码还漏写了
Scanner类的导入语句,直接运行会报编译错误。
解决方案
要实现“净收入为负就回到起点重新输入”的需求,不需要用try-catch,用循环控制流程即可:将输入、计算的逻辑放入循环中,只要计算结果为负就继续下一轮循环重新输入,直到结果符合要求再跳出循环输出最终结果。
修正后的可运行代码如下:
// 补全原代码缺失的Scanner导入 import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); double nett; // 构造循环控制输入流程 while (true) { System.out.print("Enter your income: "); double income = scanner.nextDouble(); System.out.print("Enter your expenses: "); double expenses = scanner.nextDouble(); nett = income - expenses; if (nett < 0) { System.out.println("净收入为负值,请重新输入正确的收支参数"); // 跳过本轮循环剩余逻辑,直接回到循环开头重新输入 continue; } // 净收入非负,符合要求,跳出循环 break; } System.out.println("Your nett income is " + nett); scanner.close(); } }
- 扩展说明:如果需要兼容用户输入非数字的异常场景(比如输入字母、符号导致程序崩溃),才需要搭配try-catch做异常捕获,捕获到输入类型错误时清空Scanner的缓存内容,再引导用户重新输入即可。
内容的提问来源于stack exchange,提问作者Sboh
相关产品推荐
相关产品推荐

