3 回答
TA贡献1869条经验 获得超4个赞
您必须首先用 1 初始化数组:
int[][] array = new int[5][5];
for (int i = 0; i < array.length; i++) {
for (int j = 0; j < array.length; j++) {
array[i][j] = 1;
}
}
然后在 3 个随机位置设置 0:
Random random = new Random();
int a = 0;
while (a < 3) {
int i = random.nextInt(array.length);
int j = random.nextInt(array[0].length);
if(array[i][j] != 0) {
array[i][j] = 0;
a++;
}
}
使用这种方法,数组中的每个条目都有相同的机会变成 0。最后你应该打印数组:
for (int i = 0; i < array.length; i++) {
for (int j = 0; j < array.length; j++) {
System.out.print(array[i][j]);
}
System.out.println();
}
TA贡献2051条经验 获得超10个赞
对于随机的东西,你可以使用Math.random()。它返回一个介于 0 包含和 1 排除之间的随机双精度。你可以这样做:
int w = 5, h = 5;
int[][] array = new int[w][h];
for (int i = 0; i < w; i++) {
for (int j = 0; j < h; j++) {
array[i][j] = 1;
}
}
for (int c = 0; c < 3; c++) {
int i, j;
do {
int index = (int)(Math.random() * w * h);
i = index / w;
j = index % w;
} while (array[i][j] == 0);
array[i][j] = 0;
}
仅当 0 的数量与数组的总大小相比较低时,此解决方案才可接受。如果 0 的数量太高,这段代码的效率会非常低,因为我们会随机搜索 1 的值
TA贡献1719条经验 获得超6个赞
这是一个稍微不同的有趣解决方案。创建一个包含从 0 到 24 的数字的列表,将列表打乱并从中选择 3 个第一个元素来更新二维数组。数字序列意味着数组中不同的位置将多次设置为 0。
List<Integer> sequence = IntStream.rangeClosed(0, 24)
.boxed()
.collect(Collectors.toList());
Collections.shuffle(sequence);
for (int i = 0; i < 3; i++) {
int value = sequence.get(i);
int row = value / 5;
int column = value % 5;
array[row][column] = 0;
}
生成序列的代码来自这个答案
添加回答
举报