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

如何在已填充随机数的二维数组随机位置填入指定数量的零

二维数组随机填充指定数量零的实现方案

以下是两种生产环境常用的实现方式,你可以根据场景选择:

方法1:随机坐标校验法

适合填充零的数量远小于数组总元素的场景,实现逻辑最简单:

  • 循环目标次数(比如你要填20次),每次随机生成行、列坐标
  • 校验该位置当前值是否不为0,若符合条件就赋值为0,否则重新生成坐标
    代码示例:
import java.util.Random;

int zeroCount = 20; // 需要填充的零的数量
Random random = new Random(); // 比直接用Math.random()灵活度更高
while (zeroCount > 0) {
    int i = random.nextInt(myboard.length);
    int j = random.nextInt(myboard[0].length);
    if (myboard[i][j] != 0) {
        myboard[i][j] = 0;
        zeroCount--;
    }
}

注意:如果填充零的数量占总元素比例超过80%,不推荐用这个方法,会出现大量重复随机的无效操作

方法2:全局坐标洗牌法

无无效随机操作,适合所有场景,稳定性更高:

  • 先把数组所有位置的坐标拼成一个一维集合
  • 把集合随机打乱后,取前N个(N是要填充的零的数量)坐标赋值为0即可
    代码示例:
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

// 先构造所有坐标的集合
List<int[]> positions = new ArrayList<>();
for (int i = 0; i < myboard.length; i++) {
    for (int j = 0; j < myboard[i].length; j++) {
        positions.add(new int[]{i, j});
    }
}
// 打乱坐标集合
Collections.shuffle(positions);
// 取前20个坐标设为0
int zeroCount = 20;
for (int k = 0; k < zeroCount; k++) {
    int[] pos = positions.get(k);
    myboard[pos[0]][pos[1]] = 0;
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 20:48:01