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

如何用try/catch+while循环验证整数输入?UNO游戏玩家数校验问题

搞定UNO游戏玩家数量的输入校验问题

嘿,我来帮你解决这个输入校验的麻烦!先说说你当前代码里的两个核心问题:

  1. players != (int)players完全没用:你定义的players已经是int类型了,把一个int强制转成int还是它本身,这个判断永远不会成立,所以非整数输入的情况根本不会被这个逻辑捕获到。
  2. 无限循环的根源:当用户输入字母或符号时,s.nextInt()会抛出InputMismatchException,但此时输入缓冲区里的无效字符并没有被清空——下一次循环调用nextInt()时,还是会读到这些垃圾内容,继续抛出异常,直接陷入死循环。

接下来给你一个靠谱的实现方案,用try/catch结合while循环,同时搞定非整数输入和玩家数量必须在2-4之间的校验:

import java.util.InputMismatchException;
import java.util.Scanner;

public class UNOGame {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int playerCount = 0;
        boolean isInputValid = false;

        while (!isInputValid) {
            try {
                System.out.print("请输入玩家数量(仅限2-4人):");
                playerCount = scanner.nextInt();
                
                // 校验玩家数量范围
                if (playerCount < 2 || playerCount > 4) {
                    System.out.println("哎呀,只能是2到4个玩家哦,请重新输入!");
                } else {
                    isInputValid = true; // 输入有效,跳出循环
                    System.out.println("完美!玩家数量设置为:" + playerCount);
                    // 这里可以调用你的checkPlayers逻辑
                    // checkPlayers(playerCount);
                }
            } catch (InputMismatchException e) {
                // 专门捕获非整数输入的异常
                System.out.println("不对哦,必须输入整数,请重新来!");
                scanner.nextLine(); // 重中之重:清空输入缓冲区的无效内容
            }
        }
        scanner.close();
    }
}

几个关键细节要注意:

  • 精准捕获InputMismatchException:比起用通用的Exception,专门捕获这个异常更清晰,因为它就是nextInt()遇到非整数时抛出的特定异常。
  • scanner.nextLine()清空缓冲区:这是解决无限循环的核心!抛出异常后,输入缓冲区里的无效字符(比如你输入的字母"abc")还留在那里,必须用nextLine()把它读出来扔掉,不然下一次nextInt()会重复读取这些内容,继续报错。
  • 用布尔变量控制循环:只有当输入是合法整数且在2-4范围内时,才把isInputValid设为true,结束循环。
  • 删掉那个无效的判断:players != (int)players完全没必要,直接移除就好。

如果你坚持想用自定义异常的写法,也可以调整,但对于这种简单的输入校验,上面的写法已经足够简洁好用啦。

内容的提问来源于stack exchange,提问作者K. Olofson

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 06:59:48