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

为何return语句返回默认值?Java递归输入校验异常排查

问题分析

你的代码核心问题出在递归调用时未返回递归方法的结果:

  • 当首次输入非0/1的数值时,进入else分支调用getChoice(),但这个递归调用的返回值没有被返回,方法执行完递归后会走到最后一行的return false,所以不管后续输入0还是1,最终都会返回false。
  • 另外每次调用getChoice()都新建Scanner实例,属于不必要的重复创建,建议只初始化一次。
修复后的代码
import java.util.Scanner;

class Calculator{
    public static boolean choice;
    public static Scanner input = new Scanner(System.in); // 只初始化一次Scanner

    public static void main(String[] args) {
        choice = getChoice();
        System.out.println(choice ? "true" : "false");
    }

    public static boolean getChoice() {
        System.out.println("1 : Start Calculator ");
        System.out.println("0 : Exit ");
        int number = input.nextInt();
        
        if (number == 1) {
            return true;
        } else if (number == 0) {
            return false;
        } else {
            System.out.println("Choose either 1 or 0 ");
            return getChoice(); // 关键:返回递归调用的结果
        }
    }
}
修复说明
  1. 递归返回结果:在else分支中将getChoice()改为return getChoice(),这样递归调用得到的true/false会被正确返回给上层调用。
  2. 复用Scanner实例:将Scanner的初始化移到类成员位置,避免每次递归都创建新的输入流实例,减少资源消耗。

内容的提问来源于stack exchange,提问作者user23566182

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 07:18:15