私はアプリを作るためにアンドロイドのスタジオを使用することを学んでいますので、私はシンプルな電卓を作っていますが、私は正しい答えを得る問題に遭遇してきました

コールマン:

私は仕事にそれを得るためにいくつかのことを試してみましたが、それは戻っている答えは非常に間違っています。例えば、それは= 2450.0 1 + 2 = 99.0と1 * 2を返す、など。ボタンの仕事のすべてと主な方法は、私が考えて結構です。下のボタンをクリックすると等しいとき、私は文字列の中にのTextViewでのCharSequenceを変換していますという方法があります。

Button btnEquals = (Button)findViewById(R.id.btnEquals);
    btnEquals.setOnClickListener(new View.OnClickListener() {
        public void onClick(View v) {

            String problem = textDisplay.getText().toString();
            double intermediate = evalProblem(problem);
            String answer = "" + intermediate;

            textDisplay.setText(answer);

        }
    });

そして、これは私が式を計算するために呼び出しています方法です。

public static Double evalProblem(String s) {
    double output;
    double mult = 0.0;
    double add = 0.0;
    double sub = 0.0;
    double div = 0.0;

    if (s.contains("*")) {
        int x = s.indexOf("*");
        mult = s.charAt(x-1)*s.charAt(x+1);
    }
    if (s.contains("/")) {
        int x = s.indexOf("/");
        div = s.charAt(x - 1) / s.charAt(x + 1);
    }
    if (s.contains("+")) {
        int x = s.indexOf(("+"));
        add = s.charAt(x-1) + s.charAt(x+1);
    }
    if (s.contains("-")) {
        int x = s.indexOf("-");
        sub = s.charAt(x - 1) - s.charAt(x + 1);
    }


    output = mult + add + sub + div;
    return output;
}
ロボモップ:

.charAt()文字ではなく、整数を返します。たとえば、 "8×8"の3文字を持っている- '8'、 '*'、および'8'。あなたは文字で数学的操作を実行すると、文字などのASCII値を使用しています:'A'65のASCII値を持つ'0'48の値を持っています。

従って、 '1' + '2' = 49 + 50 = 99

あなたは正しい、番号に「*」の前に文字列の一部を変換する必要がありますか?:Javaはそのための簡単な解決策があるDouble.parseDouble()方法を。

String text = "567";
int number = Double.parseDouble(text);

あなたの特定の質問を解決するために、あなたはこれを試してみてください。

int x = s.indexOf('*');
mult = Double.parseDouble(s.substring(0, x)) * Double.parseDouble(s.substring(x+1));

このソリューションの最良の部分は、コードの前と後のすべてのものを取るので、あなたは、より一桁以上持っている番号を使用できることを「*」でありs、数字に変換し、それらを。

編集: U / markspaceは以下のコメントで述べたように、あなたはここに見られるように、Javaで内蔵の解析ライブラリを使用することを検討すべきである:javaに関する代数方程式パーサ

編集2:私が使用してお勧めしていたInteger.parseInt()番号に文字列を変換することではなく、U / MartinZeitlerは以下のコメントで指摘したように、使用して二重の値に変換することがDouble.parseDouble()良いだろう。

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=17268&siteId=1