2016-03-09 83 views
0

当我运行下面的代码:charAt(i--),在(i-1)或i上获得价值?

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: String index out of range: -1

是什么原因造成的错误,我该如何解决?

+0

'i'评估i'的'减量之前的值,如果你仍然不知道。顺便说一下,该代码是难以阅读的。 – Radiodef

+0

哈哈谢谢,我写了丑陋的代码... – KevinZang

+0

也许你的意思是写'i> = 0'而不是'i

回答

2

问题是你的循环的终止条件。它与后衰减运营商的行为无关。如果ij为负数,则需要退出。现在只有两者都是负数时才会退出。尝试使用&&代替||

while (i >= 0 && j >= 0) { 
    ... 
} 

P.S:为i<s1.length()j<s2.length()循环中的测试是无用的。 ij都开始小于相应的字符串长度,并且只下降,因此条件始终为true

1

如果您ij保证是相等的(即s1.length() = s2.length(),那么你的程序,但可能不会写的不好,至少会OK

然而,问题是你的i和。j可能不相同数量如果说,j > i,然后i将达到0j之前,但循环将继续从更改while条件:

while(i>=0||j>=0) 

while(i>=0&&j>=0)