任何人都可以帮助调试我简单的Java计算器吗?

问题描述 投票:0回答:1

所以我遇到的第一个问题是,当我将第一个变量num1存储为十进制数时,比如说2.1,它将存储一个,然后第二个数字为4,所以当我命中等于总和时到5。然后我将数字存储如下:num1 = Double.parseDouble(query.getText()。toString());这似乎不是一个不错的选择,但实际上它存储了整个字符串。现在,当我存储第二个数字时,在小数点后存储它也有相同的问题,但是如果我添加与num1相加的相同代码,应用程序将崩溃。这是我的代码:

package com.example.classcalculator;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;

public class MainActivity extends AppCompatActivity {

    //logt to generate
    private static final String TAG = "MainActivity";

    //String to save in query input
    String input;

    //Id of Textviews
    TextView query, result;

    Button Zero, One, Two, Three, Four, Five, Six, Seven,
            Eight, Nine, Plus, Minus, Multiply, Divide, Clear,
            Dot, Percent, Equal, Brackets;
    //set brackets to false
    boolean clickBracket = false;

    Double num1;
    Double num2;
    Double value = 0.0;
    String operand;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        query = findViewById(R.id.query);
        result = findViewById(R.id.result);

        Zero = findViewById(R.id.zero);
        One = findViewById(R.id.one);
        One = findViewById(R.id.one);
        Two = findViewById(R.id.two);
        Three = findViewById(R.id.three);
        Four = findViewById(R.id.four);
        Five = findViewById(R.id.five);
        Six = findViewById(R.id.six);
        Seven = findViewById(R.id.seven);
        Eight = findViewById(R.id.eight);
        Nine = findViewById(R.id.nine);
        Plus = findViewById(R.id.add);
        Minus = findViewById(R.id.minus);
        Multiply = findViewById(R.id.multiply);
        Divide = findViewById(R.id.division);
        Clear = findViewById(R.id.clear);
        Dot = findViewById(R.id.dot);
        Percent = findViewById(R.id.percent);
        Equal = findViewById(R.id.equal);
        Brackets = findViewById(R.id.brackets);
    }


    public void buttonClicked(View view) {

        if(view == Zero) {
            // button1 action
            input = Zero.getText().toString();
            query.append(input);
        }
        else if(view == One) {
            // button1 action
            input = One.getText().toString();
            query.append(input);
        }
        else if (view == Two) {
            input = Two.getText().toString();
            query.append(input);
        }
        else if (view == Three) {
            input = Three.getText().toString();
            query.append(input);
        }
        else if (view == Four) {
            input = Four.getText().toString();
            query.append(input);
        }
        else if (view == Five) {
            input = Five.getText().toString();
            query.append(input);
        }
        else if (view == Six) {
            input = Six.getText().toString();
            query.append(input);
        }
        else if (view == Seven) {
            input = Seven.getText().toString();
            query.append(input);
        }
        else if (view == Eight) {
            input = Eight.getText().toString();
            query.append(input);
        }
        else if (view == Nine) {
            input = Nine.getText().toString();
            query.append(input);
        }
        else if (view == Dot) {
//            input = Dot.getText().toString();
//            query.append(input);
            if(input.contains(".")) {
            //Dot.setEnabled(false);

            }else {
                input = Dot.getText().toString();
                query.append(input);
            }
        }
        else if(view == Brackets){
            if(clickBracket) {
                query.append(")");
                clickBracket = false;
            }else {
                query.append("(");
                clickBracket = true;
            }
        }
        else if (view == Clear) {
            query.setText("");
            result.setText("");
        }


    }

    public void equalClicked(View view) {


            num2 = Double.parseDouble(query.toString());
            query.setText("");


            switch (operand) {
                case "/":
                    value = num1 / num2;
                    result.setText(Double.toString(value));
                    break;
                case "*":
                    value = num1 * num2;
                    result.setText(Double.toString(value));
                    break;
                case "-":
                    value = num1 - num2;
                    result.setText(Double.toString(value));
                    break;
                case "+":
                    value = num1 + num2;
                    result.setText(Double.toString(value));
                    break;
                default:
                    break;
            }

    }

    public void operandClicked(View view) {

        num1 = Double.parseDouble(query.getText().toString());
        //Dot.setEnabled(true);
        if (view == Plus) {
                operand = Plus.getText().toString();
                query.append(operand);
        }
        else if (view == Minus) {
            operand = Minus.getText().toString();
            query.append(operand);
        }
        else if (view == Divide) {
            operand = Divide.getText().toString();
            query.append(operand);
        }
        else if (view == Multiply) {
            operand = Multiply.getText().toString();
            query.append(operand);
        }
        else if (view == Percent) {
            operand = Percent.getText().toString();
            query.append(operand);
        }
    }
}

因此,当我存储值时必然会有一个问题,但我无法弄清楚自己做错了什么。

java android android-studio calculator arithmetic-expressions
1个回答
0
投票

最有可能的问题是,您将操作数符号附加到查询中,然后尝试解析整个内容(例如4.2 / 3.1)。第一次成功,因为查询中唯一的内容是4.2,它是有效的double,但4.2 / 3.1却不是。在解析之前,您必须拆分字符串或使用其他方法隔离其中的每个数字。

© www.soinside.com 2019 - 2024. All rights reserved.