我对编程很新,我可能会尝试在我走路之前跑步但基本上我有一个字符串列表,在每个印刷行的末尾我想随机选择一个的字符串。我做了这个,它确实选择了一个随机字符串,但问题是每次它在程序中使用时都会粘在那个随机字符串上。
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)];
帮助将不胜感激
更新 - 所以我可能措辞错了。问题是没有得到一个随机字符串,但我需要它在每次使用后重置,所以在它使用一次之后它应该重置并从列表中选择另一个字符串。
答案 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)