Java代码while循环无法在用户输入q时终止该怎么解决?
问题根因分析
- 第一个输入校验循环未优先判断输入是否为
q,若用户首次输入直接是q,会被卡在无逗号报错循环中无法退出 - 内层输入校验的循环条件逻辑完全错误:原条件
name.contains(",") == false && name.equalsIgnoreCase("q")表示「输入无逗号且是q」时才触发报错重输,会导致输入q后直接卡在内层死循环 - 冗余的
if(name.compareTo("q") == 1)判断无实际作用:输入为q时compareTo返回值为0,永远触发不了break逻辑 - 第二层循环的判断条件重复冗余:
!name.equals("q") && !name.equalsIgnoreCase("q")属于重复判断,equalsIgnoreCase已经覆盖了大小写q的场景
修正方案
修改要点
- 所有读取用户输入后的逻辑,优先判断是否为
q,匹配直接终止流程 - 修正内层校验条件:只有当输入不是q且没有逗号时,才触发无逗号报错
- 调整第一个校验循环逻辑,增加q的判断分支
- 移除无用的冗余判断代码
修正后完整代码
import java.util.Scanner; public class ParseStrings { public static void main(String[] args) { Scanner sc = new Scanner(System.in); System.out.println("Enter input string:"); String name = sc.nextLine(); // 第一个校验循环增加q判断 while(!name.equalsIgnoreCase("q") && !name.contains(",")) { System.out.println("Error: No comma in string."); System.out.println("Enter input string:"); name = sc.nextLine(); } // 简化循环条件,只要不是q就进入处理 while(!name.equalsIgnoreCase("q")) { String[] splitting = name.split(","); String first; String second; if(splitting[1].contains(" ")) { first = splitting[0]; second = splitting[1].substring(splitting[1].indexOf(' ') + 1); } else { first = splitting[0]; second = splitting[1]; } System.out.println("First word: " + first); System.out.println("Second word: " + second); System.out.println("Enter input string:"); name = sc.nextLine(); // 修正内层校验逻辑:不是q且无逗号才报错重输 while(!name.equalsIgnoreCase("q") && !name.contains(",")) { System.out.println("Error: No comma in string."); System.out.println("Enter input string:"); name = sc.nextLine(); } } System.out.println("Thank you!"); sc.close(); } }
内容的提问来源于stack exchange,提问作者Evan Zhang
相关产品推荐
相关产品推荐

