[英]Java - random digits inside an array of 5x5
int[][] array = new int[5][5];
for (int i = 0; i < array.length; i++) {
for (int j = 0; j < array.length; j++) {
System.out.print(1);
}
System.out.println();
}
大家好,我有这个打印 5x5 1 的数组
11111
11111
11111
11111
11111
我想要做的是将这些 1 中的三 (3) 个随机设为 0。 例子
11101
11111
11011
10111
11111
我怎么做? 先感谢您!
对于随机的东西,你可以使用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
您必须首先用 1s 初始化数组:
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();
}
这是一个稍微不同的有趣解决方案。 创建一个数字从 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;
}
生成序列的代码来自这个答案
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.