你如何从java中的列表中选择一个随机字符串?

问题描述 投票:1回答:6

我对编程很新,我可能会尝试在我走路之前跑,但基本上我有一个字符串列表,在每个打印行的末尾,我想随机选择一个字符串。我做了这个,它确实选择了一个随机字符串,但问题是每次它在程序中使用它坚持一个随机字符串。

    String items[] = {"bla bla", "asdnoaisd", "anafgsfsan"};
            int amount;
            String list;
            Random r = new Random();

    amount = (int) (Math.random()*25+1);

    list = items[r.nextInt(12)];

帮助将不胜感激

更新 - 所以我可能措辞错了。问题是没有得到一个随机字符串,但我需要它在每次使用后重置,所以在使用它之后它应该重置并从列表中选择另一个字符串。

java arrays string list random
6个回答
1
投票
Random r = new Random();

创建一个伪随机值列表。要在每次运行程序时获得其他结果,请使用:

Random r = new Random(System.currentTimeMillis());

代替。


1
投票

您要求从列表中选择一个随机值,并提到想要在每次选择后“重置”。这通常被称为“sampling with replacement”,这意味着当您选择样本时,您不会更改下次再次选择它的概率。想象一下来自牌组的抽牌 - 更换后你将卡片放回并重新洗牌,无需更换,将其放在一边并从(现在较小的)牌组中抽出。

使用替换采样很容易在Java中实现,只需使用Random.nextInt(int)选择0和列表大小之间的随机值。返回的整数是从列表中获取的索引。

无替换采样有点琐碎(或需要不同的数据结构),因为您必须修改原始列表或存储先前看到的值集。您应该更喜欢哪种值取决于您需要选择多少个值。

有几个人建议使用Collections.shuffle(),但它比简单生成随机索引更具侵入性。 Random.nextInt()是O(1)并且不会以任何方式修改您的列表。 Collections.shuffle()必须迭代整个列表,花费O(n log n)时间,并修改您的列表。如果您需要从列表中选择多个值,或者想要无替换选择(在这种情况下,您需要随机播放一次,然后只是遍历列表),这将非常有用。


0
投票

最简单的方法是使用时间,

list = items[(int)(System.currentTimeMillis() % items.length)];

0
投票

你是用list = items[r.nextInt(12)] ?初始化随机字符串你什么时候实际使用list?我甚至不会使用list我只是插入行items[r.nextInt(12)];当你需要访问它并以这种方式使用它将每次生成一个新的随机数而不是我用一个随机数初始化它并使用其余的你的程序。


0
投票

而不是数组,使用List

然后,使用Collections.shuffle()。现在只需遍历您的列表即可。


0
投票

如果将MockNeat添加为依赖项,则可以使用from()方法。如果这只是一次性事情,那么这样做可能有点过头了。然后我宁愿写自己的单行,正如其他人在其他答案中所建议的那样。

String[] arr = {"abc", "acd", "adf" };
String s = m.from(arr).val();
// Possible Output: "adf"

免责声明:我是图书馆的作者,因此在推荐时我可能会有偏见。

© www.soinside.com 2019 - 2024. All rights reserved.