Java如何实现多正确选项的循环输入验证?
实现输入验证的循环改进方案
方案一:基于switch的循环验证
把输入和判断逻辑包裹在do-while循环中,通过布尔变量标记输入是否有效,直到用户输入正确选项为止:
import java.util.Scanner; public class WanderingCats { public static void main(String[] args) { Scanner input = new Scanner(System.in); String pBackg; boolean isValidInput = false; do { System.out.println(""); System.out.println("Please type your Cat's BACKGROUND!"); System.out.println("Your options are:"); System.out.println("DOMESTIC / CLAN / STRAY"); pBackg = input.nextLine().trim(); // 去除输入前后的空格,避免匹配失败 switch(pBackg) { case "DOMESTIC": System.out.println("You're a DOMESTIC cat!"); isValidInput = true; break; case "CLAN": System.out.println("You're a CLAN cat!"); isValidInput = true; break; case "STRAY": System.out.println("You're a STRAY cat!"); isValidInput = true; break; default: System.out.println("Invalid input! Please enter one of the valid options."); } } while (!isValidInput); input.close(); // 关闭Scanner释放资源 } }
关键说明:
do-while循环保证至少执行一次输入请求,完美匹配“先输入再验证”的需求。isValidInput变量用于标记输入是否符合要求,只有当输入有效时才会将其设为true,从而退出循环。.trim()方法处理用户输入时的前后空格,避免因误输入空格导致匹配失败。
方案二:基于集合的验证(扩展性更好)
如果后续需要调整有效选项,用集合存储选项可以避免修改大量分支代码,更易维护:
import java.util.Scanner; import java.util.Set; import java.util.HashSet; public class WanderingCats { public static void main(String[] args) { Scanner input = new Scanner(System.in); String pBackg; // 存储所有有效选项 Set<String> validOptions = new HashSet<>(Set.of("DOMESTIC", "CLAN", "STRAY")); do { System.out.println(""); System.out.println("Please type your Cat's BACKGROUND!"); System.out.println("Your options are:"); System.out.println("DOMESTIC / CLAN / STRAY"); pBackg = input.nextLine().trim(); if (validOptions.contains(pBackg)) { System.out.printf("You're a %s cat!%n", pBackg); break; // 输入有效,直接跳出循环 } else { System.out.println("Invalid input! Please enter one of the valid options."); } } while (true); // 无限循环直到输入有效 input.close(); } }
关键说明:
Set<String>存储所有有效选项,通过contains()方法快速判断输入是否合法。- 后续新增或修改选项时,只需调整集合中的元素,无需改动判断逻辑,扩展性更强。
内容的提问来源于stack exchange,提问作者LuxxB
相关产品推荐
相关产品推荐

