0

私はアンドロイドの1行電卓を作っています。これまでのところ、この計算機は、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 を返します。

4

2 に答える 2

2

演算子を使用して==文字列値を比較していますが、これは正しくありません。オブジェクト (文字列を含む)==の場合、参照を比較して、それらが同じオブジェクトを参照しているかどうかを判断します。

文字列値を比較するには、String#equals代わりに次を使用します。

if ("+".equals(allSigns.get(i-1)))
于 2013-05-06T21:24:25.670 に答える
0

Java での文字列比較では"oneString".equals("another") notを使用==

            ...
            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
            ....

やるべきです。

于 2013-05-06T21:24:27.647 に答える