添加整数字符串:循环的索引越界异常

Adding integer strings: Index out of bounds exception for looping

我的代码应该添加两个包含正整数的字符串。它遍历两个字符串并从两个字符串的末尾开始将数字相加,就像您在正常加法中所做的那样。它将数字存储在堆栈中,并将堆栈转换为字符串。当我 运行 代码时,我得到一个指向行的索引超出范围异常:while(num1.charAt(i) - '0' >= 0 && num2.charAt(j) - '0' >= 0)。我不确定我做错了什么。

class Solution {
    public String addStrings(String num1, String num2) {
        int i = num1.length() - 1;
        int j = num2.length() - 1;
        int carry = 0;
        int sum = 0;
        Stack<Integer> result = new Stack<Integer>();
        
        while(num1.charAt(i) - '0' >= 0 && num2.charAt(j) - '0' >= 0) {
            int n1 = num1.charAt(i) - '0';
            int n2 = num2.charAt(j) - '0';
            
            sum = n1 + n2 + carry;
            carry = sum / 10;
            result.push(sum % 10);
            
            i--;
            j--;
        }

        if(num1.length() > num2.length()) {
            i = num1.length() - num2.length() - 1;
            
            while(num1.charAt(i) - '0' >= 0) {
                int n = num1.charAt(i) - '0';
                
                sum = n + carry;
                carry = sum / 10;
                result.push(sum % 10);
                
                i--;
            }
        }
        else if(num2.length() > num1.length()) {
            i = num2.length() - num1.length() - 1;
            
            while(num2.charAt(i) - '0' >= 0) {
                int n = num2.charAt(i) - '0';
                
                sum = n + carry;
                carry = sum / 10;
                result.push(sum % 10);
                
                i--;
            }
        }
        else if(carry > 0 && num1.length() == num2.length()) {
            result.push(carry);
        }
        
        String ret = "";
        for(int x = 0; x < result.size(); x++) {
            ret += result.peek();
            result.pop();
        }
        return ret;
    }
}

因为你在循环做

i--;
j--;

然后在某个时候你打电话给 while(num1.charAt(-1) - '0' >= 0 && ...

快速解决方案是在循环中测试 ij 是否大于 -1

while(i >= 0 && j >= 0 && num1.charAt(i) - '0' >= 0 && num2.charAt(j) - '0' >= 0) {