出界,为什么?

时间:2015-02-26 21:12:02

标签: java arrays

我发现奇怪(至少对我而言)异常抛出。让我做得够短。有一种方法可以返回一个带有随机值的数组。在main方法中,我使用foreach循环来显示存储在我的数组中的每个值。

tab[i] = (int) ((Math.random()*10));

在我设置最小值之前一切正常。

tab[i] = (int) ((Math.random()*10)+1);
  

线程“main”中的异常java.lang.ArrayIndexOutOfBoundsException:   10

有人可以向我解释一下吗?我不知道右侧的+1如何影响数组的大小。

编辑:完整代码

import java.lang.Math;

public class Arrays {

    static private int[] makeArray(int wide) {

        int[] tab = new int[wide];

        for(int i=0;i<tab.length;i++) {
            tab[i] = (int) ((Math.random()*10)+1);
        }

        return tab;
    }

    public static void main(String[] args) {
        int tabby[] = makeArray(10);

        for(int i : tabby) {
            System.out.println(tabby[i]);
        }

    }

}

1 个答案:

答案 0 :(得分:4)

for (int i : tabby)为您提供tabby数组中的值,而不是数组的索引(0到9)。只需System.out.println(i)

编辑:详细说明,您应该看到此程序间歇性地抛出异常,因为您的随机数分配有十分之一的机会产生数字10,而tabby[10]将超出界限。< / p>