【问题标题】:Randomly generated numbers in a basic array基本数组中随机生成的数字
【发布时间】:2012-03-15 07:22:17
【问题描述】:

我只需要知道我应该做什么,这样一个基本数组就会被随机生成的数字填充。现在我知道该怎么做了,我不知道怎么做就是让随机生成的数字大于一直到数组末尾生成的最后一个数字。

【问题讨论】:

    标签: java arrays random


    【解决方案1】:

    惊讶没有人提到我们可以使用SecureRandom API 轻松生成随机数组无需手动填充它

    例如生成大小为100的随机数组:

    SecureRandom random = new SecureRandom();
    int arr[] = random.ints(100).toArray();
    

    顺便说一句,这应该可以从 java 8 开始。

    【讨论】:

      【解决方案2】:

      有一个问题的评论,我丢失了作者的名字,建议将随机生成的数字添加到之前的数字中,我认为这是一个有趣的方法。

      arr[0] = Random.nextInt(100);
      
      for(int i = 1; i < arr.length; ++i) {
          arr[i] = arr[i-1] + Random.nextInt(100); 
      } 
      

      这消除了对结果数组进行排序的需要。

      【讨论】:

      • 注意它可能会因为integer overflow而失败
      • @amit,有效的关注点,取决于使用的随机范围和数组的大小。
      • 如果数字限制在特定范围内,问题仍然存在:您可能不会“溢出”,但您可能会得到一个超出范围的数字。
      • @amit 是的,如果 OP 正在寻找 N 个随机数 0..M,那么生成和排序方法是最好的。我之前内容中的随机范围是指Random.nextInt(range)
      • IMO 当您使用nextInt(int) 时,您会无缘无故地限制自己。你可以用4来填满它。无论如何,这只是 OP 在使用此解决方案时需要考虑的一点。
      【解决方案3】:

      您可以拥有自己的生成增量算法...

      例如...

      每次随机并将该数字添加到最后一个:)

      Random java 中的类不允许你有一个最小限制从哪里开始......只有一个......

      例如:

      myArray[0] = Random.nextInt(10000);
      for(int i=1; i<myArray.length; i++)
      {
          myArray[i] = myArray[i-1]+Random.nextInt(10000);
      }
      

      所以..它是随机的,您不必对其进行排序..尽量保持一切简单...

      【讨论】:

      • 请注意,由于overflow,它可能会失败。
      • 如果他有一个长度为 2000000 的数组 .. 是 :) 如果只有 1000 .. 不! :)
      • (1) 当您使用nextInt(10000) 时,您会无缘无故地限制自己。你可以用4来填满它。 (2) 当数组大小为 ~200000 [减去零] 时,您可能会溢出。无论如何,这只是 OP 在使用此解决方案时需要考虑的一点。
      • 是的,现在当我去我的驱动程序类显示带有 S.O.P 的数组时。我在 arr[i] = gen.nextInt(10000) 上收到运行时错误;我不知道为什么要这样做。我将 arr[i] = gen.nextInt(10000) 设置为一个名为 value 的变量,它是一个 Int。
      【解决方案4】:

      只需生成列表,然后将它们从小到大排序。

      for(int i = 0; i < arr.length; ++i) {
          arr[i] = Random.nextInt(100);
      }
      Arrays.sort(arr);
      

      【讨论】:

      • 由于某种原因,当我对其进行编码时,它返回 arr[i] = Random.nextInt(100),根据示例,而不是在这个问题中看到的字面意思,我得到一个运行时错误那条线。对于我的实际代码,它被读取为 array[x] = gen.nextInt(10000);。我不能说 Random.nextInt(num),因为那将是对非静态方法的静态引用。
      • 对不起,我的意思是在评论的开头,代码字符串导致运行时错误,它还没有返回任何东西。
      【解决方案5】:

      您可以生成一个随机数数组,然后使用Array sort对其进行排序。

      【讨论】:

      • 是的,现在当我去我的驱动程序类显示带有 S.O.P 的数组时。我在 arr[i] = gen.nextInt(10000) 上收到运行时错误;我不知道为什么要这样做。我将 arr[i] = gen.nextInt(10000) 设置为一个名为 value 的变量,它是一个 Int
      • @Tigh 您需要显示更多代码,并添加堆栈跟踪。请编辑您的问题,或者最好提出一个新问题以获得更多关注。
      【解决方案6】:

      生成随机数,然后对数组进行排序。
      您可以使用Arrays.sort()对数组进行排序

      它不能确保每个数字都严格大于之前的数字 [它只保证 &lt;=],所以如果这是一个问题 - 您必须确保生成的数字中没有欺骗。

      【讨论】:

        猜你喜欢
        • 2018-04-16
        • 1970-01-01
        • 2021-05-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-06-05
        • 1970-01-01
        相关资源
        最近更新 更多