添加整数字符串:循环的索引越界异常
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 && ...
快速解决方案是在循环中测试 i
和 j
是否大于 -1
。
while(i >= 0 && j >= 0 && num1.charAt(i) - '0' >= 0 && num2.charAt(j) - '0' >= 0) {
我的代码应该添加两个包含正整数的字符串。它遍历两个字符串并从两个字符串的末尾开始将数字相加,就像您在正常加法中所做的那样。它将数字存储在堆栈中,并将堆栈转换为字符串。当我 运行 代码时,我得到一个指向行的索引超出范围异常: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 && ...
快速解决方案是在循环中测试 i
和 j
是否大于 -1
。
while(i >= 0 && j >= 0 && num1.charAt(i) - '0' >= 0 && num2.charAt(j) - '0' >= 0) {