我似乎找不到数组溢出的方式。一切似乎都很好。
class sumofnum {
static int calculate_sum(String num) {
int len, sum = 0, i;
len = num.length();
int[] arr = new int[len - 1];
// fill in array.
for(i = 0; i < len; i++)
arr[i] = Character.getNumericValue(num.charAt(i));
// calculate sum.
for(i = 0; i < len; i++)
sum += arr[i];
return sum;
} // method calculate_sum ends.
我使用上述方法尝试计算数字总和。
实际输出:
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 1
at sumofnum.calculate_sum(sumofnum.java:18)
at sumofnum.main(sumofnum.java:40)
答案 0 :(得分:1)
用int[] arr = new int[len - 1];
代替int[] arr = new int[
len
];
。
您需要创建一个数组,在其中存储与字符串长度相同的字符串字符 (字符数)。
否则,您将在上一次迭代的此行中得到提到的异常:
arr[i] = Character.getNumericValue(num.charAt(i));
答案 1 :(得分:1)
问题出在这一行:
int[] arr = new int[len - 1];
虽然索引从0到len-1
,但是大小为len
。改用:
int[] arr = new int[len];
答案 2 :(得分:0)
错误位于
int[] arr = new int[len - 1];
创建的数组的大小小于字符串的长度,这就是为什么在最后一次迭代中它给出超出界限的异常的索引
此外,您还可以使用单个循环通过执行
来添加和获取字符整数,从而避免数组本身 for(i = 0; i < len; i++){
sum+= Character.getNumericValue(num.charAt(i));
}