如何确保程序仅接收合法输入?限制颜色为Red/Black、数字1-10
嘿,我来帮你梳理清楚这个输入验证的逻辑,让你的程序能准确判断用户输入是否有效~
完整的输入验证方案
你需要覆盖几个关键的检查点,同时结合try-catch处理格式类的错误,下面一步步给你拆解:
必须检查的3个核心条件
- 输入格式是否正确:用户必须输入「颜色+数字」两个部分,而且第二个部分得是整数。如果不符合这个格式(比如输入"Red abc"或者只打了"Black"),Scanner会抛出
InputMismatchException,这时候就得用try-catch捕获这个异常。 - 颜色是否合法:只能是Red或者Black(如果想允许大小写不严格匹配,比如"red"也能通过,可以用
equalsIgnoreCase()方法)。 - 数字范围是否合规:数字必须在1到10之间(包含1和10)。
完整的可运行代码示例
我给你写了一个带循环验证的实现,用户输入无效就一直提示,直到输入正确为止:
import java.util.InputMismatchException; import java.util.Scanner; public class ColorNumberValidator { public static void main(String[] args) { Scanner input = new Scanner(System.in); String chosenColor = null; int chosenNumber = -1; boolean isInputValid = false; // 循环直到输入有效 while (!isInputValid) { try { System.out.print("Please choose Black or Red....and a number from 1-10 (Example : Black 4): "); // 读取颜色和数字 String colorInput = input.next(); int numberInput = input.nextInt(); // 检查颜色是否合法 if (!colorInput.equals("Red") && !colorInput.equals("Black")) { System.out.println("Oops! Color must be either Red or Black. Try again."); continue; } // 检查数字范围 if (numberInput < 1 || numberInput > 10) { System.out.println("Oops! Number has to be between 1 and 10. Try again."); continue; } // 所有验证通过,标记为有效 chosenColor = colorInput; chosenNumber = numberInput; isInputValid = true; System.out.println("Perfect! You selected " + chosenColor + " " + chosenNumber); } catch (InputMismatchException e) { // 处理格式错误的情况 System.out.println("Invalid input format! Please enter like 'Red 7' or 'Black 3'."); // 必须清除错误的输入缓存,不然会陷入死循环 input.next(); } } input.close(); // 这里可以继续处理选中的颜色和数字啦 } }
几个关键细节要注意
- 清除Scanner缓存:catch块里的
input.next()非常重要,它会把错误的输入内容从Scanner的缓存里去掉,不然程序会一直重复读取错误内容,陷入死循环。 - 大小写兼容(可选):如果想让用户输入"red"或者"black"也能通过验证,把颜色判断的代码改成
!colorInput.equalsIgnoreCase("Red") && !colorInput.equalsIgnoreCase("Black")就行。 - 循环逻辑:用while循环包裹整个输入流程,确保用户输入无效时会被重新提示,直到输入符合要求为止。
内容的提问来源于stack exchange,提问作者PizzaParrot
相关产品推荐
相关产品推荐

