简体   繁体   English

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

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

I have a two dimensional array 10x10 and I need to know the way to put 20 (-1)s in 20 random cells. 我有一个二维数组10x10,我需要知道将20(-1)放入20个随机单元中的方法。 Thats my array: 那就是我的数组:

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

Pseudo code: 伪代码:

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.

Method randomHashSet() gives you n (20) numbers from 0 to 99. Then you can use easy math trick to map this one-dimension list to two-dimensions array. 方法randomHashSet()为您提供0至99之间的n (20)数字。然后,您可以使用简单的数学技巧将此一维列表映射到二维数组。

Try this code: 试试这个代码:

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;
    }
}
  • Create one dimensional array or even better List which will represent elements from your two dimensional array. 创建一维数组或什至更好的List ,它将表示二维数组中的元素。
  • Set first 20 elements in list to -1 . 将列表中的前20个元素设置为-1
  • Shuffle list ( Collections.shuffle may be helpful) (now -1 are at random places and you know that there are 20 of them) 随机播放列表( Collections.shuffle可能会有所帮助)(现在-1位于随机位置,您知道其中有20个)
  • Put -1 back to two dimensional array. -1返回二维数组。 For instance if -1 is at position 23 place -1 in your array at position [2][3] ( /10 and %10 may be helpful here). 例如,如果-1位于位置23则将数组中的-1放置在位置[2][3] (此处/10%10可能会有所帮助)。

This post discusses how to get a random number between any two bounds: Java Random number between -100 and 100 这篇文章讨论如何获取任意两个边界之间的随机数: Java随机数介于-100和100之间

The legal array indexes for your 2D-array are between 0 and 9. 2D数组的有效数组索引在0到9之间。

So get a random numbers between zero and nine, twice, and use those for the array index. 因此,请获得一个介于零和九之间的随机数,两次,并将其用于数组索引。 You could get the same set twice, so you may need to keep track of the already-chosen indicies, or if (thatelement == -1) is true, it was already set, so do it again. 可能会两次获得相同的集合,因此您可能需要跟踪已经选择的索引,或者如果(thatelement == -1)为true,则它已经被设置,因此请再次执行。

To fill all elements with -1 , you could use (pre-7) System.arraycopy(o,i,o,i,i) or (7 & 8) Arrays.copyOfRange(i[],i,i) . 要使用-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();
      }
   }
}

Output: 输出:

    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