计算数字位数总和时发生数组溢出

时间:2019-04-25 19:18:17

标签: java

我似乎找不到数组溢出的方式。一切似乎都很好。

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)

3 个答案:

答案 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));
}