为何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(); // 关键:返回递归调用的结果 } } }
修复说明
- 递归返回结果:在else分支中将
getChoice()改为return getChoice(),这样递归调用得到的true/false会被正确返回给上层调用。 - 复用Scanner实例:将
Scanner的初始化移到类成员位置,避免每次递归都创建新的输入流实例,减少资源消耗。
内容的提问来源于stack exchange,提问作者user23566182
相关产品推荐
相关产品推荐

