2013-05-06 102 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