这是一个摇滚,纸张,剪刀游戏.我的问题是,如果我私下移动武器.长度随机r =新随机(武器.长度); 它会给我一个错误.如果我在方法中移动了weapon.length,它将成功运行.有什么不同?
public class Game {
private String[] weapons = {"rock", "paper", "scissor"};
private Random r = new Random(weapons.length);
public void thePick() {
System.out.println(weapons[r.nextInt()]);
}
}
Run Code Online (Sandbox Code Playgroud)
VS
public class Game {
private String[] weapons = {"rock", "paper", "scissor"};
private Random r = new Random();
public void thePick() {
System.out.println(weapons[r.nextInt(weapons.length)]);
}
}
Run Code Online (Sandbox Code Playgroud)
r.nextInt()会给你任何随机整数,无论阵列在那里.当你打电话的时候,private Random r = newRandom(weapons.length);你实际上是在给RNG播种3,而没有设置3的上限.
它可以给你42,2,000,000,-10等等.数组在位置42没有元素,你会得到一个错误,因为3的种子将总是产生超出范围的随机值.如果它没有播种(即Random r=new Random())那么获得有效值的可能性很小,但这个机会非常小.
对于第二个,您将选择带有边界的随机int,即从0到数组的长度(不包括上限).
所以对你来说:
{"rock", "paper", "scissor"};
Run Code Online (Sandbox Code Playgroud)
rock是元素0,paper是元素1,剪刀是元素2. random.nextInt(weapons.length)调用总是返回0到2的int(3,长度,不包括在内).