首先,在今天编写代码时遇到了这样一个报错:
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 3
问题展示
1.编写水仙花数的代码
2.运行后报错
问题解决
一,设置断点
如图所示
因为我写的是一个方法,所以断点设置在主方法即可。
然后再进行运行
可以发现,这里arr[length]后出现了我们的报错信息,那么可以基本确定报错出现在这里了,然后回看代码
int []arr = new int[3];
int []arr2 = new int[900];
System.out.print("水仙花数有: ");
int length = 0 ;
for (int i =100;i<1000;i++){
int temp = i ;
arr[2] = temp%10;
temp /= 10;
arr[1] = temp%10;
temp /= 10;
arr [0] = temp;
if (arr[0]*arr[0]*arr[0]+arr[1]*arr[1]*arr[1]+arr[2]*arr[2]*arr[2] == i){
// FIXME:这里不该使用arr数组,而是使用arr2数组,arr数组的最大值为3,水仙花数有4个,故而造成了数组越界的问题。
arr[length] = i;
length ++ ;
}
}
我的本意是创建一个存储水仙花数的数组,然后在判断这个数字是水仙花数时,将水仙花数存起来以便返回。但是因为我用来分离水仙花数各个位数的数组也是arr起头,所以将他们两个搞混了。导致arr[]数组越界。导致报错
二,读报错
还有一种解决方案是直接读报错,回看我们的报错信息可以发现,我们的报错其实就告诉了我们哪一行出现了问题,
明显看到是28行和第7行代码出现问题,
而最上方的Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 3
这一行关键信息,我们应该从java.lang看起,Array是数组的意思,Index是索引的意思,OUt是外面,超过的意思,后面暂时不知道了,题主英语没过四级,所以翻译也是很一般。但是我们可以推断出好像是数组的索引出问题了,貌似是索引超了的意思,很自然就联想到了数组越界了。再看到28行代码一般就反应过来了。