Java老虎机程序问题:数组元素相等判断逻辑故障排查
简易老虎机程序问题修复方案
问题排查
你的程序出现异常的核心原因是数组越界:for循环结束后,变量i的值为3(数组长度是3,循环从i=0执行到i=2,结束后i自增为3),此时访问slots[i]会触发ArrayIndexOutOfBoundsException。同时输出逻辑不符合需求,且输赢判断存在漏洞(比如两个数字相等但第三个不同的情况会无输出)。
修复后的完整代码
import java.util.Scanner; import java.util.Random; public class Main { public static void main(String[] args) { Scanner scnr = new Scanner(System.in); int slots[] = new int[3]; boolean play = true; String playAgain; System.out.println("Welcome to the Simple Slot Machine!"); while (play) { System.out.println("\nPress Enter to spin the wheels..."); scnr.nextLine(); // 等待用户按回车 spinReels(slots); displayResult(slots); // 询问是否再玩 System.out.print("\nPlay again? (y/n): "); playAgain = scnr.nextLine().trim().toLowerCase(); if (!playAgain.equals("y")) { play = false; System.out.println("Thanks for playing!"); } } scnr.close(); } // 生成随机老虎机数字 public static void spinReels(int[] slots) { Random rand = new Random(); for (int i = 0; i < slots.length; i++) { slots[i] = rand.nextInt(10); } } // 展示结果并判断输赢 public static void displayResult(int[] slots) { // 拼接三个数字输出 System.out.print(slots[0] + "" + slots[1] + "" + slots[2]); // 判断输赢:三个数字全相等则赢,否则输 if (slots[0] == slots[1] && slots[1] == slots[2]) { System.out.println("... WINNER!"); } else { System.out.println("... LOSER!"); } } }
关键修改说明
- 修复数组越界:直接使用数组下标
0、1、2拼接数字,避免使用循环结束后的i变量访问数组。 - 优化判断逻辑:删除冗余的
else if,只要三个数字不全相等就判定为输,覆盖所有输的场景。 - 完善交互流程:
- 添加循环实现多次游戏功能
- 等待用户按回车再启动转盘
- 游戏结束后询问是否继续
- 拆分功能模块:将转盘生成和结果展示拆分为独立方法,代码更清晰易维护。
内容的提问来源于stack exchange,提问作者Mount Dew
相关产品推荐
相关产品推荐

