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

Java如何在二维数组的随机不重复位置填充指定数值

实现方案

核心思路

  • 为了避免随机位置重复,我们可以先把8×8数组所有64个坐标全部预先生成,再随机打乱顺序,取前6个位置使用:前5个赋值为1,第6个赋值为2,从根源上避免坐标重复问题,逻辑简单且不会出现反复重试的死循环问题。
  • Java中int类型数组初始化后默认值就是0,原来的手动赋值全0的循环可以省略。

完整可运行代码

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

public class CastleTilesTest {
    public static void main(String[] args) {
        int castleTiles[][] = new int[8][8];

        // 预生成所有坐标
        List<int[]> allPositions = new ArrayList<>();
        for (int i = 0; i < castleTiles.length; i++) {
            for (int j = 0; j < castleTiles[i].length; j++) {
                allPositions.add(new int[]{i, j});
            }
        }

        // 随机打乱坐标顺序
        Collections.shuffle(allPositions);

        // 前5个互不重复的位置赋值1
        for (int k = 0; k < 5; k++) {
            int[] pos = allPositions.get(k);
            castleTiles[pos[0]][pos[1]] = 1;
        }

        // 第6个和前面完全不重复的位置赋值2
        int[] pos2 = allPositions.get(5);
        castleTiles[pos2[0]][pos2[1]] = 2;

        // 打印最终数组
        for(int i = 0; i < castleTiles.length; i++) {
            for(int j = 0; j < castleTiles[i].length; j++) {
                System.out.printf("%3d", castleTiles[i][j]);
            }
            System.out.println();
        }
    }
}

轻量实现方案(适合小数据场景)

如果不想预生成全量坐标,也可以每次生成随机坐标后判断是否未被占用(值为0),确认可用后再赋值:

import java.util.Random;

public class CastleTilesTest2 {
    public static void main(String[] args) {
        int castleTiles[][] = new int[8][8];
        Random random = new Random();

        // 生成5个不重复的1
        int count1 = 0;
        while (count1 < 5) {
            int i = random.nextInt(8);
            int j = random.nextInt(8);
            if (castleTiles[i][j] == 0) {
                castleTiles[i][j] = 1;
                count1++;
            }
        }

        // 生成1个和1不重复的2
        while (true) {
            int i = random.nextInt(8);
            int j = random.nextInt(8);
            if (castleTiles[i][j] == 0) {
                castleTiles[i][j] = 2;
                break;
            }
        }

        // 打印最终数组
        for(int i = 0; i < castleTiles.length; i++) {
            for(int j = 0; j < castleTiles[i].length; j++) {
                System.out.printf("%3d", castleTiles[i][j]);
            }
            System.out.println();
        }
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 18:18:02