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

如何为二维数组每个索引赋随机整数?Java代码存在赋值不全问题

问题分析与修复

你的代码填不满数组的核心原因有两个:

  • 循环次数设成了最多24次,但5×5数组有25个位置,本身次数就不够;更糟的是,遇到随机到已填充的位置时,你只是让x加1就跳过了,没做任何有效赋值,导致实际填充的数量远低于24。
  • 你写的else if(board2D[columnRandom][rowsRandom] == m)逻辑完全没用,因为m是你接下来要填的数,之前填的都是1到m-1,这个条件永远不会成立,等于根本没处理重复位置的情况。

修正后的代码

import java.util.Random;

public class Main {

    public static void main(String[] args) {
        int[][] board = new int[5][5];
        int sNA = 5;

        sequenceMaker(board);
        drawBoard(board);
    }

    public static void drawBoard(int[][] board2D) {
        for(int i = 0; i < board2D.length; i++){
            for(int j=0; j < board2D[i].length; j++){
                System.out.print(board2D[i][j] + " ");
            }
            System.out.println();
        }
    }

    public static void sequenceMaker(int[][] board2D) {
        Random rand = new Random();
        int m = 1;
        // 要填充1到25,共25个数字
        while(m <= 25){
            int columnRandom = rand.nextInt(5);
            int rowsRandom = rand.nextInt(5);
            // 如果当前位置是空的(初始值0),就赋值
            if(board2D[columnRandom][rowsRandom] == 0) {
                board2D[columnRandom][rowsRandom] = m;
                m += 1;
            }
            // 如果位置已被填充,什么都不做,循环会重新生成随机位置
        }
    }
}

关键改动说明

  1. 循环条件改为m <=25:直接以需要填充的数字数量为终止条件,只要还没填完25个数,就一直循环,确保所有位置都被填满。
  2. 去掉无效的else if分支:不需要判断等于m的情况,只要位置为空就赋值,否则重新生成随机坐标,直到找到空位置。
  3. 删除多余的x变量:原来的x变量只会限制循环次数,导致遇到重复时无法继续尝试填充,现在完全不需要它。

这样修改后,代码会不断生成随机坐标,直到每个位置都被分配1到25的随机整数,不会再出现填充不完整的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 04:31:30