繁体   English   中英

如何在数组中添加随机数?

[英]How can i add random numbers in an array?

我有一个二维数组10x10,我需要知道将20(-1)放入20个随机单元中的方法。 那就是我的数组:

private int[][] array = new int[10][10];

伪代码:

Generate a random number for first index range [0,9]
Generate a random number for the second index range [0,9]
Check if it has already been set:
    if it has repeat until this is false
    if it hasn't, continue below
Set the location
Repeat 19 more times.

方法randomHashSet()为您提供0至99之间的n (20)数字。然后,您可以使用简单的数学技巧将此一维列表映射到二维数组。

试试这个代码:

import java.util.HashSet;
import java.util.Random;
import java.util.Set;

public class MyClass {
    static int[][] array = new int[10][10];

    public static void main(String[] args) {
        Set<Integer> numbers = MyClass.randomHashSet(20);

        for (Integer el : numbers) {
            array[el / 10][el % 10] = -1;
        }

        for (int i = 0; i < 10; i++) {
            for (int j = 0; j < 10; j++) {
                System.out.print(array[i][j] + " ");
            }
            System.out.println();
        }

    }

    public static Set<Integer> randomHashSet(int n) {
        Set<Integer> set = new HashSet<Integer>();
        Random random = new Random();

        while (set.size() < n) {
            set.add(random.nextInt(100));
        }
        return set;
    }
}
  • 创建一维数组或什至更好的List ,它将表示二维数组中的元素。
  • 将列表中的前20个元素设置为-1
  • 随机播放列表( Collections.shuffle可能会有所帮助)(现在-1位于随机位置,您知道其中有20个)
  • -1返回二维数组。 例如,如果-1位于位置23则将数组中的-1放置在位置[2][3] (此处/10%10可能会有所帮助)。

这篇文章讨论如何获取任意两个边界之间的随机数: Java随机数介于-100和100之间

2D数组的有效数组索引在0到9之间。

因此,请获得一个介于零和九之间的随机数,两次,并将其用于数组索引。 可能会两次获得相同的集合,因此您可能需要跟踪已经选择的索引,或者如果(thatelement == -1)为true,则它已经被设置,因此请再次执行。

要使用-1填充所有元素,可以使用(pre-7) System.arraycopy(o,i,o,i,i)或(7&8) Arrays.copyOfRange(i[],i,i)

import java.util.Random;

public class ArrayGrid
{
   public static void main(String[] args)
   {  
      int[][] ranAr = new int[10][10];

      // Complete 20 times
      for(int i = 0; i < 20; i++)
      {
         // Get random value between 0-9
         // for the array position
         Random r = new Random();
         int posOne = r.nextInt(10);
         int posTwo = r.nextInt(10);

         // Ensure the position has not already been set
         while(ranAr[posOne][posTwo] == -1)
         {
            posOne = r.nextInt(10);
            posTwo = r.nextInt(10);   
         }

         // Set value to position
         ranAr[posOne][posTwo] = -1;
      }

      // Print the grid to verify
      for(int x = 0; x < 10; x++)
      {
         for(int j = 0; j < 10; j++)
         {
            System.out.printf("%5d ", ranAr[x][j]);
         }
         System.out.println();
      }
   }
}

输出:

    0     0     0    -1     0     0     0    -1     0     0 
   -1    -1     0    -1    -1     0     0    -1     0     0 
   -1     0     0    -1     0     0     0     0     0     0 
    0     0     0     0     0     0     0     0     0     0 
   -1     0     0     0     0     0     0    -1    -1     0 
    0     0     0     0     0     0    -1     0     0     0 
   -1     0     0     0     0     0     0     0     0     0 
    0     0     0     0     0    -1    -1     0     0     0 
    0    -1    -1     0     0     0    -1    -1     0     0 
    0     0     0     0     0     0     0     0     0     0 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM