Math.random范围使用arraylist的大小

时间:2013-10-05 13:33:13

标签: java random arraylist

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中的第一个术语。我该怎么做才能解决这个问题?

2 个答案:

答案 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.01.0之间生成一个数字。你在多次使用前进行整数转换,因此随机数会降低到0,然后整体结果将始终为零。

  int number = (int)(Math.random()*last);

应该正常工作