3
ArrayList<Integer>  lista = new ArrayList<Integer>();
lista.add(159);
lista.add(170);
lista.add(256);

例如,我在我的数组列表中得到了这 3 个数字,我想随机获取其中一个。这怎么可能?

4

5 回答 5

18

一种使用 Random 类的方法:

ArrayList<Integer>  lista = new ArrayList<Integer>();
lista.add(159);
lista.add(170);
lista.add(256);

Random r = new Random();
System.out.println(lista.get(r.nextInt(lista.size())));

或使用随机播放:

ArrayList<Integer>  lista = new ArrayList<Integer>();
lista.add(159);
lista.add(170);
lista.add(256);

Collections.shuffle(lista);
System.out.println(lista.get(0));
于 2013-10-13T15:43:19.337 回答
8

您可以利用Random生成一个int用作随机索引。

Random rand = new Random();
Integer randomInt = lista.get(rand.nextInt(lista.size()));

在这里,将在和rand.nextInt(lista.size())之间生成一个随机索引。0size - 1

参考
随机#nextInt(int)

返回一个伪随机、均匀分布的 int 值,介于 0(包括)和指定值(包括)之间,取自该随机数生成器的序列。

于 2013-10-13T15:41:48.473 回答
1

这个想法是生成一个新的随机索引并使用该随机索引从数组中获取随机数。

为了那个原因

  1. 生成一个随机数,使用Math.random()它返回一个带正号的双精度值,大于或等于 0.0 且小于 1.0。
  2. 将随机值调整为介于列表的开始索引和结束索引之间。我们通过将 double 值乘以列表的大小并将其转换为整数来做到这一点,因为列表索引是整数。

这为我们提供了以下代码。

int randomIndex = (int)(Math.random() * lista.size());

System.out.println(lista.get(randomIndex));

请注意,这里生成的随机数并不是真正随机的,而是使用伪随机生成器生成的,足以满足大多数日常使用。

如果您好奇,可以在此处阅读有关PRNG的更多信息 :)

于 2013-10-13T16:00:47.743 回答
0

对列表中的元素数量使用随机数并将其用作索引。

于 2013-10-13T15:41:40.800 回答
-1

做这个:

Random rn = new Random();
int i = rn.nextInt() % lista.size();
System.out.println(lista.get(i));
于 2013-10-13T15:41:58.150 回答