当前位置: 首页 > 知识库问答 >
问题:

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

卢深
2023-03-14
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

我该怎么做?提前感谢您!

共有3个答案

方轩昂
2023-03-14

为了好玩,这里有一个稍微不同的解决方案。创建一个数字从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;
}

生成序列的代码来自此答案

祝叶五
2023-03-14

对于随机的东西,你可以使用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

松锐藻
2023-03-14

您必须首先用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();
}
 类似资料:
  • 这个问题是Java-Math.random()的扩展:选择13×13三角形数组的元素。我随机选择两个数字(包括 0-12),我希望这些值相等。 但现在,由于这是一个乘法游戏,我希望有一种方法来偏置结果,以便某些组合出现得更频繁(比如,如果玩家在12x8时表现得更差,我希望它出现得更频密)。最终,我想偏向于91种组合中的任何一种,但一旦我把这一点写下来,那就不难了。 我的想法:添加一些到三角形数和以

  • 问题内容: 当他每次运行程序时都不断获得相同的数字时,我试图向Java解释随机数生成器。我为同一件事创建了自己的简单版本,每次运行该程序时,我也得到了与他得到的确切数字相同的数字。 我究竟做错了什么? 100个数字中的最后五个数字是: 问题答案: 您已经为随机数生成器提供了恒定的值。它是确定性的,因此每次运行都会生成相同的值。 我不确定您为什么选择使用作为种子,但是种子值与生成的值范围无关(这是由

  • 问题内容: 我正在尝试获取一个随机数列表,并将其放入队列中,而不会重复任何随机数。 通过上面的代码,我得到了一些随机数的重复 有人知道怎么做吗? 问题答案: 这个怎么样: 在某个范围内“添加唯一的随机数”等效于将范围内的所有数字相加,然后对结果进行混排。

  • 问题内容: 我上面有一个方法,该方法应生成用户指定的随机元素数组。随机生成的整数应介于0到10之间(含0和10)。我能够生成随机整数,但是我遇到的问题是检查唯一性。我尝试检查唯一性是在上面的代码中,但是数组仍然包含整数的重复项。我做错了什么,有人可以给我提示吗? 问题答案: 您确实找到重复的值。但是,您将其替换为另一个可能重复的随机数。相反,请尝试以下操作: 但是,这种方法效率低下。我建议列出数字

  • 问题内容: 我正在编写一个从整数n创建2D数组的程序。然后,我必须用从1到n n数组大小的 值填充数组, 并检查它是否是一个幻方。 我现在的方式是按照从1到n n数组大小的 顺序填充 数组。我该如何随机? 我的代码: 问题答案: 创建一个随机的数字列表以添加到您的数组中,如下所示:

  • 问题:写一个读取实数列表的程序。程序结束后,它应该只打印出唯一的数字。也就是说,只在列表中出现一次的数字。如果列表上有超过50个唯一的数字,那么您应该只打印前50个。 input.txt文件= 结果-唯一数为