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

Java大富翁游戏玩家选择功能验证实现技术求助

解决Java大富翁游戏玩家选择的校验逻辑问题

嘿,我来帮你搞定这个玩家选择的校验问题~你的代码里主要有两个核心问题,导致逻辑混乱无法正常工作,我来一步步拆解并给出修复方案:

你的代码存在的问题

  1. 重复调用scanner.nextInt():每次调用这个方法都会从输入流读取一个新的整数。比如你原来的if判断里,scanner.nextInt() >=2读了一次输入,scanner.nextInt() <=4又读了一次,最后赋值的时候再读一次——这意味着用户输入一个合法值后,程序会要求用户再输入两次,完全不符合预期。
  2. 逻辑结构混乱:if-else和while循环的组合没有形成一个连贯的校验流程,合法输入的赋值和非法输入的循环提示都没有正确关联起来。

修复后的代码实现

我用do-while循环重构了逻辑,确保每次只读取一次输入,并且持续校验直到用户输入合法值:

import java.util.Scanner;

public class MonopolyPlayerSetup {
    public static void main(String[] args) {
        int numberPlayers = 0;
        Scanner scanner = new Scanner(System.in);
        
        // do-while循环:先执行一次输入操作,再判断是否需要重复
        do {
            System.out.println("Please enter Number of players (2-4)");
            // 仅读取一次输入,存储到变量中供后续判断使用
            numberPlayers = scanner.nextInt();
            
            // 如果输入不合法,给出提示
            if (numberPlayers < 2 || numberPlayers > 4) {
                System.out.println("Not a valid choice. Please enter a number between 2 and 4.");
            }
        } while (numberPlayers < 2 || numberPlayers > 4); // 不合法就循环
        
        // 输入合法后执行后续逻辑
        System.out.println(numberPlayers + " players selected");
        scanner.close(); // 记得关闭Scanner释放资源
    }
}

代码逻辑说明

  • 单次输入读取:每次循环只调用一次scanner.nextInt(),把输入值存在numberPlayers变量里,所有校验都基于这个变量,避免了重复读取输入的问题。
  • do-while循环的优势:保证用户至少会看到一次输入提示,符合正常的交互流程——先提示输入,再校验,不合法就重复提示。
  • 资源清理:最后关闭Scanner,避免不必要的资源泄漏。

如果你想用while循环实现,也可以这样写(逻辑和do-while一致,只是先判断再执行):

import java.util.Scanner;

public class MonopolyPlayerSetup {
    public static void main(String[] args) {
        int numberPlayers = 0;
        Scanner scanner = new Scanner(System.in);
        
        System.out.println("Please enter Number of players (2-4)");
        numberPlayers = scanner.nextInt();
        
        while (numberPlayers < 2 || numberPlayers > 4) {
            System.out.println("Not a valid choice. Please enter a number between 2 and 4.");
            numberPlayers = scanner.nextInt();
        }
        
        System.out.println(numberPlayers + " players selected");
        scanner.close();
    }
}

两种方式都能正常工作,你可以根据自己的习惯选择~

内容的提问来源于stack exchange,提问作者user10536213

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.11 08:49:57