2013-05-06 99 views
0

我正在製作一個android單行計算器。到目前爲止,這個計算器在我用javascript,C++和c#編寫時工作正常,但我無法讓它在android(java)中工作。這裏是我的代碼:Android計算器給出了錯誤的答案

  String seq = String.valueOf(sec.getText()); 
      ArrayList<Integer> allNums = new ArrayList<Integer>(); 
      int i = 0; 
      ArrayList<String> allSigns = new ArrayList<String>(); 
      String currentNums = ""; 
      for (i = 0; i< seq.length(); i++) 
      { 
       if (seq.charAt(i) != '+' && seq.charAt(i) != '-' && seq.charAt(i) != '*' && seq.charAt(i) != '/') 
       { 
        currentNums+=seq.charAt(i); 
       } 
       else 
       { 
        allNums.add(Integer.parseInt(currentNums)); 
        currentNums=""; 
        allSigns.add(String.valueOf(seq.charAt(i))); 
       } 
      } 
      allNums.add(Integer.parseInt(currentNums)); 

      int result = (Integer)allNums.get(0); 
      for (i = 1; i <= allNums.size(); i++) 
      { 
       if (allSigns.get(i-1) == "+") 
        result+=allNums.get(i); 
       else if (allSigns.get(i-1) == "-") 
        result-=allNums.get(i); 
       else if (allSigns.get(i-1) == "*") 
        result*=allNums.get(i); 
       else if (allSigns.get(i-1) == "/") 
        result/=allNums.get(i); 
       else 
       { 
        sec.setText(String.valueOf(result)); 
        break; 
       } 
      } 

我打電話通過onClick事件的功能。該應用程序不會崩潰,但只會讓我回答第一個數字。例如:34 + 31-4 * 8/1它返回34.任何想法?

回答

2

您正在使用==運算符來比較字符串值,這是不正確的。對於對象(包括字符串),==比較引用以確定它們是否引用同一對象。

要比較兩個字符串值,使用String#equals代替:在java中

if ("+".equals(allSigns.get(i-1))) 
+0

嗯,我不知道。我試過了,但現在應用程序崩潰了。有任何想法嗎?這也是爲字符,或只是爲字符串? – 2013-05-06 21:32:10

+0

'allNums.get(i)'必須拋出一個'ArrayIndexOutOfBoundsException',因爲你從'1'循環到'allNums.size()'。嘗試將調用改爲'allNums.get(i-1)',就像你在'allSigns'中做的那樣。 – 2013-05-06 21:40:04

+0

如果您打算從allNums.get(i)製作allNums.get(i-1),則無法使用。它們是不同的,因爲符號總是比數字的數量少一個。希望你能理解我。 – 2013-05-06 21:48:18

0

字符串比較使用"oneString".equals("another")==

  ... 
      if (allSigns.get(i-1).equals("+")) 
       result+=allNums.get(i); 
      else if (allSigns.get(i-1).equals("-")) 
       result-=allNums.get(i); 
      else if (allSigns.get(i-1).equals("*")) 
       result*=allNums.get(i); 
      else if (allSigns.get(i-1).equals("/")) 
       result/=allNums.get(i); 
      else 
      .... 

應該這樣做。

+0

嗯,我不知道。我試過了,但現在應用程序崩潰了。有任何想法嗎? – 2013-05-06 21:31:22