You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何确保程序仅接收合法输入?限制颜色为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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 07:55:58