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

时间:2015-08-17 20:41:04

标签: java arrays string list random

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

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

帮助将不胜感激

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

6 个答案:

答案 0 :(得分:1)

Random r = new Random();

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

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

代替。

答案 1 :(得分:1)

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

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

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

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

答案 2 :(得分:0)

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

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

答案 3 :(得分:0)

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

答案 4 :(得分:0)

使用test "should get index when not logged in" do get root_path assert_response :success assert_not is_logged_in? assert_template 'application/index' end

代替数组

然后,使用List。现在只需遍历您的列表。

答案 5 :(得分:0)

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

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

免责声明:我是该库的作者,因此当我推荐该库时可能会有所偏见。