如何将数据放入整数数组中

时间:2012-01-23 09:38:51

标签: java arrays random

我是Android的新手,也是java的新手。在我的应用程序中,我需要的是随机数字。它不会再次重复。

举个例子说我有一个TextView和一个按钮,点击按钮它应该显示随机数字,那些随机数字不应重复。

为此我想将随机数据存储到数组中并检查随机数是否在数组中。如果它不存在于数组中,它将暂时存储该数字。就像第一次点击它应该给我看一些随机数,比如在1-20之间说它选择了5,现在这个值应该存储到数组中,如果再次点击下一个按钮5号,那么它应该跳过这个数字。

请帮我解决这个问题,

5 个答案:

答案 0 :(得分:1)

按顺序创建一个包含数字的数组。然后使用Fisher-Yates shuffle算法生成唯一的非重复随机序列。

// Fisher-Yates shuffle.
Random random = new Random();
int[] data = new int[20];
for (int i=0; i<20; i++)
{
  data[i] = i;
}
for (int i=0; i<20; i++)
{
  int j = random.nextInt(20);
  int t = data[i];
  data[i] = data[j];
  data[j] = t;
}

答案 1 :(得分:1)

您应首先创建Random的实例。这将为您生成随机数。然后,您应该将所有已生成的数字保存在ArrayList<Integer>中,以便您可以跟踪到目前为止生成的数字。

Random mRandom=new Random();
//Generate first number, int [0,20)
int no=mRandom.nextInt(20);
//keep that number
ArrayList<Integer> mGeneratedSoFar=new ArrayList<Integer>();
mGeneratedSoFar.add(no);

然后在你的按钮点击处理程序中,生成一个直到现在才生成的数字:

int no=mRandom.nextInt(20);
while(mGeneratedSoFar.contains(no)){
    no=mRandmom.nextInt(20);
}
mGeneratedSoFar.add(no);

编辑:并且正如@Guido Garcia所说,您可以将您的号码保留在其他类型的CollectionMaps中以获得更好的效果。但只要您产生的数字很少,我认为这不会成为一个问题。

答案 2 :(得分:1)

讨论用于存储生成的随机数据的数据结构,请考虑使用java.util.Set来存储唯一的数字集。要检查Set use Set#contains(Object o)方法中是否已存在数字。

CODE:

int max = 20;
System.out.println("Generating random integers in range 0.." + max);
Set<Integer> set = new HashSet<Integer>(max);
Random randomGenerator = new Random();
while (set.size() <= max) {
  int randomInt = randomGenerator.nextInt(max+1);
  System.out.println("Generated : " + randomInt);
  if (!set.add(randomInt))
      System.out.println("Set already has: " + randomInt);
}
System.out.println("Set has: " + set);

答案 3 :(得分:0)

我认为这个问题与Java有关,而与Android无关。

如果您只需要创建一小组唯一的随机数,您可以将生成的数字存储在Map中,这样您就可以在O(1)中确定之前是否生成过数字。如果之前没有生成,请使用它并将其放入地图中。否则创建一个新的并重复。

答案 4 :(得分:0)

java.util.Random generator;    
java.util.Set<Integer> nums;
nums.add(generator.nextInt(20));