public static void main(String[] args) {
int[] arr = { 1, 4, 8, 11, 15, 18 };
        int i = (int) (Math.random() * 10 % arr.length);
        System.out.println(arr[i]);
}这是前几天在这里看到的一个答案。运行结果是正确的有一点算不明白,int i = (int) (Math.random() * 10 % arr.length); 这句里,i最大值为什么是5?1 < Math.random() * 10 < 10,和arr.length取余,怎么也到不了5吧?

解决方案 »

  1.   

    arr.length是6,任何一个数除6的余数最大就是5啊。
      

  2.   

    完全可能的。。你打代码改为下面这样:
                      int[] arr = { 1, 4, 8, 11, 15, 18 };
    double temp = Math.random() * 10;
    int i = (int) (temp % arr.length);
    System.out.println(arr[i] + " : " + temp + " : " + i);
    在这种情况下就可以看到结果是可能的。
    这是一种测试的结果:
    18 : 5.180824322118425 : 5
    当temp在5-6之间的时候,,它与arr.length的余数就是5.
    明白没?
      

  3.   

    arr.length=6
    1 < Math.random() * 10 < 10
    只要在5~6之间的数被6取余就得最大5了