You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.27 02:24:28