【问题标题】:How to randomly select an integer from a list in Java?如何从Java列表中随机选择一个整数?
【发布时间】:2013-02-19 19:01:13
【问题描述】:

这是我目前所拥有的:

private int [] delays = {1000, 1333, 3443, 1220, 3232};

我想要一个函数,它会在继续之前休眠片刻:

sleep(random(delays))

我找到了字符串的解决方案,但是当涉及到整数时,我并不真正理解它。

我已经导入了随机数。我得到了:

    Random rand = new Random();
int delayIndex = rand.nextInt(delays.length);

但是它说:Random 类型中的方法 nextInt(int, int) 不适用于参数 (int)

感谢您否定我。

感谢您的帮助,但我遇到的问题仍然存在:

Random 类型中的方法 nextInt(int, int) 不适用于参数 (int)

【问题讨论】:

  • 您是否尝试从delays 数组中随机选择一个整数?
  • 你确定你没有不小心用逗号“,”而不是句点“.”输入“(延迟,长度)”吗?
  • 是的,我确定我没有使用逗号。是的,我正在尝试随机选择。

标签: java random integer


【解决方案1】:

使用 Java 的内置 Random 类在 0 和数组的最后一个索引之间选择一个随机整数。

import java.util.*;

Random rnd = new Random();
int delayIndex = rnd.nextInt(delays.length);

然后访问您的数组并将该数组元素输入Thread.sleep

【讨论】:

  • ahhh 所以它的 delays.length,我正在使用 delays.getSize() :让我看看这个! 2分钟,谢谢!哦,是的,这就是我遇到的问题:Random 类型中的方法 nextInt(int, int) 不适用于参数 (int)
  • 是的,它是一个数组,所以使用 delays.length。
【解决方案2】:

0...N 生成一个随机值,其中 N 是保存持续时间的数组的大小。一旦你有了那个随机值,它是数组的索引,只需在从你的数组中检索该索引位置的持续时间内休眠。

Random random = new Random();
int randomInt = random.nextInt(delays.length);
sleep(delays[randomInt]);

【讨论】:

    【解决方案3】:
    Random r = new Random ();
    
    Thread.sleep (delays [r.nextInt (delays.length)]);
    

    【讨论】:

    • 我仍然收到错误:Random 类型中的方法 nextInt(int, int) 不适用于参数 (int)
    • @Echoe 确保你的Random 真的是java.util.Random
    【解决方案4】:
    public int random(int[] delays){
        Random rn = new Random();
        int range = delays.length - 1;
        int pos = rn.nextInt() % range;
    
        return delays[pos];
    }
    

    【讨论】:

      【解决方案5】:
      sleep(delays[(int)(Math.random() * 100) / 20]);
      

      Math.random() 返回一个随机数 >= 0.0 和

      乘以 100,转换为 int,然后除以 20 - 你现在有一个随机数 0 - 4。

      或者:

      sleep(delays[new Random().nextInt(5)]);
      

      http://docs.oracle.com/javase/7/docs/api/java/lang/Math.html#random() http://docs.oracle.com/javase/7/docs/api/java/util/Random.html

      【讨论】:

      • 谢谢,这似乎解决了我的问题。感谢您的帮助!知道 nextInt 的问题似乎是什么吗?
      • Random.nextInt() 接受一个参数;一个int。它实际上是上限,排他性的。您将得到一个介于零和该数字减一之间的数字。
      • 如果您收到您声明的消息,您正在导入一些奇怪的东西而不是 java.util.Random
      【解决方案6】:
      Random rnd = new Random();
      int index = rnd.nextInt(delays.length);
      

      【讨论】:

      • 在你的情况下,index 将从 -delays.length+1delays.length-1 包括在内,即它可以是负数。
      • @MikhailVladimirov 谢谢,忘了 java 给 mod 的结果是负面的。
      【解决方案7】:

      整数数组不是列表,数组通常有顺序的内存存储对象(例如 0 = 1、1 = 16、2 = 0、3 = 100) 但无论如何,这里是如何使用整数数组:

      int[] delays = {1000, 1333, 3443, 1220, 3232};
      Random rand = new Random();
      Thread.sleep(delays[rand.nextInt(delays.length)]);
      

      要对带有整数列表的列表做同样的事情,它会是这样的:

      List<Integer> delays = Lists.newArrayList(1000, 1333, 3443, 1220, 3232);
      int delay;
      for (Iterator<Integer> iter = delays.iterator(); iter.hasNext();){
          Random rand = new Random();
          if(rand.nextInt(delays.size()) == delays.size()){
                  delay = iter.next();
                  break;
          }
      }
      Thread.sleep(delay);
      

      你可能猜到我也是java新手,但我希望能帮上忙。

      【讨论】:

        猜你喜欢
        • 2019-08-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-01-16
        • 2010-09-23
        • 2017-04-26
        • 1970-01-01
        相关资源
        最近更新 更多