Java大富翁游戏玩家选择功能验证实现技术求助
解决Java大富翁游戏玩家选择的校验逻辑问题
嘿,我来帮你搞定这个玩家选择的校验问题~你的代码里主要有两个核心问题,导致逻辑混乱无法正常工作,我来一步步拆解并给出修复方案:
你的代码存在的问题
- 重复调用
scanner.nextInt():每次调用这个方法都会从输入流读取一个新的整数。比如你原来的if判断里,scanner.nextInt() >=2读了一次输入,scanner.nextInt() <=4又读了一次,最后赋值的时候再读一次——这意味着用户输入一个合法值后,程序会要求用户再输入两次,完全不符合预期。 - 逻辑结构混乱: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
相关产品推荐
相关产品推荐

