Java do/while循环无法返回值 输入校验逻辑死循环问题排查
代码错误说明
你的代码一共有4处逻辑错误,直接导致循环卡死、判断失效:
- 第一个内层while条件写反:合法输入(add/show/exit)才会进入循环打印错误提示,非法输入反而直接跳过提示,和预期逻辑完全相反
- 第二个内层while是永久死循环:
- 循环语句末尾直接写了分号,没有任何循环执行逻辑,进入后就会永久卡住
- 条件里的逻辑运算符用错:要判断「输入不属于三个合法指令」,必须用
&&(逻辑与)而不是||(逻辑或)。对任意输入来说,必然同时不满足至少两个合法指令,比如输入add时,它肯定不等于show也不等于exit,用||连接的话条件永远为真,永远跳不出循环
- 字符串比较方式错误:Java中比较字符串内容必须用
equals()方法,你写的userChoice == "test"比较的是两个字符串对象的内存地址,不是内容,这个判断完全失效 - return位置错误:return写在do循环块内部,第一次执行就会直接返回值,外层的do-while循环根本起不到循环校验的作用,属于冗余代码
修正后可运行代码
public static String userFunction() { Scanner sc = new Scanner(System.in); String userChoice; System.out.println("Please enter command (add / show / exit):"); userChoice = sc.next().toLowerCase(); // 只要输入不是三个合法值,就循环提示重输 while (!userChoice.equals("add") && !userChoice.equals("show") && !userChoice.equals("exit")) { System.out.println("Invalid input! Please fill in add, show or exit"); userChoice = sc.next().toLowerCase(); } return userChoice; }
注:如果你的程序需要持续接收指令直到输入exit,可以在调用这个方法的外层套循环,不需要在方法内部写多余的嵌套循环层。
内容的提问来源于stack exchange,提问作者NoobAtCodes
相关产品推荐
相关产品推荐

