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

Java开发Bingo程序时如何保存二维数组bingoCard保持数据固定

问题根源

你每次调用生成方法都拿到新卡片,核心问题出在两处:

  • 方法内部每次执行都会跑bingoCard = new int[numRows][numCols];,直接把全局静态数组的引用指向刚创建的空数组,之前生成的卡片内容直接被覆盖丢弃
  • 没有做生成状态判断,不管之前有没有生成过可用卡片,每次调用都会从头走一遍随机数生成逻辑,自然每次结果都不一样。
修复方法

核心逻辑是仅在卡片从未生成过时执行一次随机生成流程,后续所有调用直接返回已经生成好的固定卡片,不要重复创建数组、重复跑随机逻辑。

修改后的可直接用的代码如下:

import java.util.Arrays;
import java.util.Random;

// 全局静态数组保留原定义即可
private static int[][] bingoCard = new int[3][9];

public static int[][] bingoCard(){
    int numRows = 3;
    int numCols = 9;
    int randomNumbersPerRow = 5;
    int randomNumberBound = 90;

    // 检查卡片是否已经生成过:第一行存在非0值就证明已经生成完成,直接返回现有数据
    boolean hasGenerated = false;
    for (int num : bingoCard[0]) {
        if (num != 0) {
            hasGenerated = true;
            break;
        }
    }
    if (hasGenerated) {
        // 若需要每次调用都打印卡片,保留打印逻辑即可,直接输出已有的固定卡片
        for (int row = 0; row < numRows; row++) {
            for (int col = 0; col < numCols; col++) {
                System.out.printf("%2d ", bingoCard[row][col]);
            }
            System.out.println();
        }
        return bingoCard;
    }

    Random random = new Random();
    // 删掉原来方法里重新new bingoCard的代码!全局数组已经初始化,直接给元素赋值即可
    for (int row = 0; row < numRows; row++) {
        // 先把当前行所有位置初始化为0
        for (int col = 0; col < numCols; col++) {
            bingoCard[row][col] = 0;
        }
        // 每行随机选5个空位填入1-90的随机数
        for (int i = 0; i < randomNumbersPerRow; i++) {
            int indexToAssign = random.nextInt(numCols);
            while (bingoCard[row][indexToAssign] != 0) {
                indexToAssign = random.nextInt(numCols);
            }
            int numToAssign = random.nextInt(randomNumberBound)+1;
            bingoCard[row][indexToAssign] = numToAssign;
        }
    }

    // 打印首次生成的卡片
    for (int row = 0; row < numRows; row++) {
        for (int col = 0; col < numCols; col++) {
            System.out.printf("%2d ", bingoCard[row][col]);
        }
        System.out.println();
    }
    return bingoCard;
}
可选扩展

如果后续需要支持重开游戏、生成新的固定卡片,可以单独加一个重置方法,把数组所有元素重置为0,下次调用生成方法时就会自动生成新的固定卡片:

public static void resetBingoCard() {
    for (int[] row : bingoCard) {
        Arrays.fill(row, 0);
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 17:03:21