Java-5x5数组中的随机数字

时间:2019-03-04 20:36:33

标签: java

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

我该怎么做?预先谢谢你!

4 个答案:

答案 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();
}