【问题标题】:how to put data into array of integer如何将数据放入整数数组
【发布时间】:2012-01-23 09:38:50
【问题描述】:

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

举个例子,假设我有一个 TextView 和一个 Button,单击按钮时它应该会显示随机数,并且这些随机数不应重复。

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

请帮我解决这个问题,

【问题讨论】:

    标签: java arrays random


    【解决方案1】:

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

    代码:

    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);
    

    【讨论】:

    • 此外,如果要添加的项目已包含在 Set 中,Set.add 将返回 false。它不允许您添加重复的项目。
    【解决方案2】:

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

    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 中以获得更好的性能。但只要生成的数字很少,我认为这不是问题。

    【讨论】:

    • 无法对 Random 类型的非静态方法 nextInt(int) 进行静态引用
    • oooo 谢谢你先生,它对我很有用。真的你救了我的一天。谢谢
    【解决方案3】:

    按顺序创建一个包含您的数字的数组。然后使用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;
    }
    

    【讨论】:

      【解决方案4】:

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

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

      【讨论】:

      • 你能给我的朋友举个例子吗?正如你所说的,你能用一个例子解释一下吗?这将是一个很好的帮助
      【解决方案5】:
      java.util.Random generator;    
      java.util.Set<Integer> nums;
      nums.add(generator.nextInt(20));
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-09-09
        • 1970-01-01
        • 2013-12-25
        • 2014-12-06
        • 2018-08-10
        • 1970-01-01
        相关资源
        最近更新 更多