我在下面的代码中遇到了问题:
/* package whatever; // don't place package name! */
import java.util.*;
import java.lang.*;
import java.io.*;
/* Name of the class has to be "Main" only if the class is public. */
class Ideone {
public static void main (String[] args) throws java.lang.Exception {
int[] map = new int[100 * 100];
System.out.println("Works : " + map[10 * 100 + 5]);
System.out.println("Works? : " + map[99 * 100 + 99]);
System.out.println("Works?! : " + map[20 * 100 + 100]);
//System.out.println("And this?? : " + map[99 * 100 + 100]);
}
}
正如您所见,最后一行(评论)不起作用;它会抛出一个ArrayIndexOutOfBoundsException
。
但我不明白;它应该在数组的范围内。数组的大小为100*100
,因此99 * 100 + 100 = 100*100
因此索引100*100
位于数组中。
我已经解决了这个问题;我想知道为什么我在上面的行中得到例外。
答案 0 :(得分:4)
它抛出该异常,因为数组的索引是从0
到length -1
。
因此,如果您声明其长度为100 * 100,则索引从0
到100*100 -1
。
你尝试了什么:
map[99 * 100 + 100]
等于
map[100*100]
无法加入。
答案 1 :(得分:1)
Arrays是0基础索引。
因此,您可以访问地图中从索引0
到map.length - 1
的元素。
I.e:map[0]
到map[100*100-1]
或99 * 100 + 100 = 10000 > 9999
,这就是您获得IOOBE
的原因。
答案 2 :(得分:1)
您正在尝试访问地图[10000]。数组索引以0开头,因此大小为10,000的数组表示0到9999。