Android Calculator给出了错误的答案

时间:2013-05-06 21:21:22

标签: java android calculator

我正在制作一个Android单行计算器。到目前为止,当我用javascript,c ++和c#编写它时,这个计算器可以工作,但我不能让它在android(java)中工作。这是我的代码:

            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 个答案:

答案 0 :(得分:2)

您正在使用==运算符来比较字符串值,这是不正确的。对于对象(包括字符串),==比较引用以确定它们是否引用同一对象。

要比较字符串值,请改用String#equals

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

答案 1 :(得分:0)

java中的字符串比较使用"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
            ....

应该这样做。