public void pickWinner() {
int last = list.size() - 1;
int number = (int)Math.random()*last;
System.out.println("And the winner is...");
Student winner = list.get(number);
System.out.println(winner);
}
我在生成除了ArrayList中的第一项之外的赢家时遇到问题。我认为这是Math.random()的问题,因为我的ArrayList的大小似乎是正确的,但它似乎只生成0来获得我的ArrayList中的第一个术语。我该怎么做才能解决这个问题?
答案 0 :(得分:4)
试试这个:
int number = (int)(Math.random()*last);
问题是你在将math.random值乘以之前将其转换为int。演员阵容具有更高的运算符优先级(有关完整列表,请参阅http://introcs.cs.princeton.edu/java/11precedence/)
此外,您的代码永远不会选择列表中的最后一个学生,您不应该-1''last'int。
您还可以考虑使用Random类,即new java.util.Random().nextInt(list.size());
,这样您就不必担心强制转换以及如何对整数进行舍入。如果需要多次执行,您甚至可以重复使用Random实例。
答案 1 :(得分:1)
Math.random()
会在0.0
和1.0
之间生成一个数字。你在多次使用前进行整数转换,因此随机数会降低到0,然后整体结果将始终为零。
int number = (int)(Math.random()*last);
应该正常工作