当我运行以下代码时:
int i = s1.length()-1, j = s2.length()-1;
int t1, t2, c=0;
while(i>=0||j>=0) {
t1=Character.getNumericValue(i<s1.length() ? s1.charAt(i--) : '0');
t2=Character.getNumericValue(j<s2.length() ? s2.charAt(j--) : '0');
c = (t1 + t2) > 1 ? 1 : 0;
res.append(t1^t2 + c);
}
我知道这个错误:
java.lang.StringIndexOutOfBoundsException:超出范围的字符串索引:-1
是什么导致了错误,我如何修复它?
发布于 2016-03-08 20:37:44
问题是循环的终止条件。它与后递减运算符的行为无关。如果i
或j
为负值,则需要退出。现在,只有当两者都为负数时,它才会退出。尝试使用&&
而不是||
while (i >= 0 && j >= 0) {
...
}
P.S.:循环中对i<s1.length()
和j<s2.length()
的测试是无用的。i
和j
开始时都比各自的字符串长度小,并且只会下降,因此条件总是true
。
发布于 2016-03-08 20:37:58
如果您的i
和j
保证是相等的(即s1.length() = s2.length()
,那么您的程序虽然编写得不好,但至少是可以的。
但是,问题是您的i
和j
可能不是相同的数字。如果,比方说,j > i
,那么i
将在j
之前到达0
,但循环将继续。将while
条件从以下位置更改:
while(i>=0||j>=0)
至
while(i>=0&&j>=0)
https://stackoverflow.com/questions/35882950
复制相似问题