2013-04-16 35 views
1

我在一種方法中遇到了麻煩。在輸入中我們有字符串,例如(a + -b * i)某個符號(c + -d * i)。程序必須計算並輸出結果。我需要在第一個括號中的索引和第二個括號中的索引。而且我的計劃將會起作用。但是,僅在輸入(a-b * i) - (c-d * i)或(a-b * i)*(c-d * i)時,返回錯誤結果-1的方法。在某些測試中錯誤輸出

我的方法爲兩個括號。

public int getSign1(String str) 
    { 
     int sign1; 
     if(str.indexOf("+") < str.indexOf(")")) 
      sign1 = str.indexOf("+"); 
     else if(str.indexOf("-", 2) < str.indexOf(")")) 
      sign1 = str.indexOf("-", 2); 
     else sign1 = -1; 

     return sign1; 
    } 

    public int getSign2(String str) 
    { 
     int sign2; 
     if(str.lastIndexOf("+") > str.lastIndexOf("(")) 
      sign2 = str.lastIndexOf("+"); 
     else if(str.lastIndexOf("-") > str.lastIndexOf("(")) 
      sign2 = str.lastIndexOf("-"); 
     else sign2 = -1; 

     return sign2; 
    } 

第二種方法總是有效,但不是第一種方法(請幫我查找錯誤)。

實施例:(1-2i)*(3-4i)

第一種方法是返回-1,但不是2.爲什麼?

回答

4

這是因爲在表達:

(1-2i)*(3-4i)你沒有任何+字符,看到String#lastIndexOf後:

字符最後一次出現的字符序列 指數由此對象代表,或-1如果字符不爲 出現

然後你知道爲什麼str.lastIndexOf("+")將是-1。這當然是< str.indexOf(")")

因此sign1將爲-1。

您可以修復它:

if(str.indexOf("+")!= -1 && str.indexOf("+") < str.indexOf(")")) 
+0

非常感謝。我忘了它 – rustock

1

對於輸入(a-b*i)-(c-d*i),這裏有在此字符串沒有 '+'。

public int getSign1(String str){ 
    if(str.indexOf("+") < str.indexOf(")")) 
       sign1 = str.indexOf("+"); 
.. 
} 

在該方法中首先,如果你正在檢查「+」,因此,它不存在它的索引爲-1小於str.indexOf(")")索引所以其returing -1