我发现了奇怪的(至少对我而言)异常抛出。让我让它足够短。有一种方法返回具有随机值的数组。在 main 方法中,我使用 foreach 循环来显示数组中存储的每个值。
tab[i] = (int) ((Math.random()*10));
在我设置最小值之前它工作正常。
tab[i] = (int) ((Math.random()*10)+1);
Exception in thread "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]);
}
}
}
最佳答案
for (int i : tabby)
为您提供 tabby
数组中的值,而不是数组的索引(零到九)。只需执行 System.out.println(i)
。
编辑:具体来说,您应该看到该程序间歇性地抛出异常,因为您的随机数分配有十分之一的机会产生数字 10,而 tabby[10]
将出界。
关于java - 越界了,为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28752830/