Mój kod ma dodać dwa ciągi zawierające dodatnie liczby całkowite. Iteruje przez oba ciągi i dodaje cyfry, zaczynając od końców dwóch ciągów, tak jak przy normalnym dodawaniu. Przechowuje cyfry na stosie, a stos jest konwertowany na łańcuch. Kiedy uruchamiam kod, otrzymuję wyjątek poza zakresem indeksu wskazujący na linię: while(num1.charAt(i) - '0' >= 0 && num2.charAt(j) - '0' >= 0). Nie jestem pewien, co zrobiłem źle.

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;
    }
}
0
Programmer 5 styczeń 2022, 02:52
charAt() zwraca StringIndexOutOfBoundsException, jeśli podany numer indeksu jest większy lub równy długości tego ciągu lub liczba ujemna.
 – 
PM 77-1
5 styczeń 2022, 03:02

1 odpowiedź

Najlepsza odpowiedź

Ponieważ zapętlasz się i robisz

i--;
j--;

Wtedy w pewnym momencie dzwonisz while(num1.charAt(-1) - '0' >= 0 && ...

Szybkim rozwiązaniem jest sprawdzenie, czy i i j są większe niż -1 w Twojej pętli.

while(i >= 0 && j >= 0 && num1.charAt(i) - '0' >= 0 && num2.charAt(j) - '0' >= 0) {
3
Scary Wombat 5 styczeń 2022, 03:29