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;
}
}
1 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) {
Podobne pytania
Nowe pytania
java
Java to język programowania wysokiego poziomu. Użyj tego tagu, jeśli masz problemy z używaniem lub zrozumieniem samego języka. Ten tag jest rzadko używany samodzielnie i jest najczęściej używany w połączeniu z [spring], [spring-boot], [jakarta-ee], [android], [javafx], [hadoop], [gradle] i [maven].
charAt()
zwracaStringIndexOutOfBoundsException
, jeśli podany numer indeksu jest większy lub równy długości tego ciągu lub liczba ujemna.