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
我该怎么做?预先谢谢你!
答案 0 :(得分:1)
对于随机内容,您可以使用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的值
答案 1 :(得分: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();
}
答案 2 :(得分:1)
这里的娱乐解决方案略有不同。创建一个具有0到24的数字的列表,将列表随机播放,然后从中选择前3个元素以更新2D数组。数字序列意味着数组中不相同的位置将被多次设置为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;
}
用于生成序列的代码来自this answer
答案 3 :(得分:0)
使用Random生成随机数并使用计数器。
Random rand = new Random();
int numberOfZero = 3;
for (int i = 0; i < array.length; i++) {
for (int j = 0; j < array.length; j++) {
int n = rand.nextInt(2);
if(numberOfZero == 0){
n=1;
}
if(n == 0){
numberOfZero--;
}
System.out.print(n);
}
System.out.println();
}