2016-03-09 54 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)