Проблема с несколькими операциями и приоритетами для калькулятора Android - PullRequest
0 голосов
/ 07 мая 2020

Я почти закончил свой калькулятор с Android Studio, но есть кое-что, что я не могу решить:

Я пытался написать программу для операций умножения и приоритетов умножения / деления, но она работает только в Java. Я не знаю, как это исправить в моем проекте Android studio java.

Если бы вы, ребята, могли взглянуть на мой код и сказать, как это исправить, мне бы очень помогло. Вот код:

 package com.example.calcapp_training;
    import androidx.appcompat.app.AppCompatActivity;
    import java.util.ArrayList;
    import android.annotation.SuppressLint;
    import android.os.Bundle;
    import android.view.View;
    import android.widget.Button;
    import android.widget.TextView;
    import java.text.DecimalFormat;
    import java.util.List;
    import java.util.Scanner;


public class MainActivity extends AppCompatActivity {

    Button mBtnPlus, mBtnMinus, mBtnMultiply, mBtnDivide, mBtnDel, mBtnEqual, mBtnPoint, mBtn0, mBtn1, mBtn2, mBtn3, mBtn4, mBtn5, mBtn6, mBtn7, mBtn8, mBtn9;
    TextView mInput, mResult;
    TextView mError;
    double mValueOne, mValueTwo;
    int mCalculation;
    String mProcess;
    boolean mIsNew = true;

    @Override
    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        final TextView errorMessage = findViewById(R.id.error);
        final TextView welcomeMessage = findViewById(R.id.welcome);

        mBtn0 = (Button) findViewById(R.id.btn0);
        mBtn1 = (Button) findViewById(R.id.btn1);
        mBtn2 = (Button) findViewById(R.id.btn2);
        mBtn3 = (Button) findViewById(R.id.btn3);
        mBtn4 = (Button) findViewById(R.id.btn4);
        mBtn5 = (Button) findViewById(R.id.btn5);
        mBtn6 = (Button) findViewById(R.id.btn6);
        mBtn7 = (Button) findViewById(R.id.btn7);
        mBtn8 = (Button) findViewById(R.id.btn8);
        mBtn9 = (Button) findViewById(R.id.btn9);
        mBtnPlus = (Button) findViewById(R.id.btnPlus);
        mBtnMinus = (Button) findViewById(R.id.mBtnMinus );
        mBtnMultiply = (Button) findViewById(R.id.mBtnMultiply );
        mBtnDivide = (Button) findViewById(R.id.mBtnDivide );
        mBtnDel = (Button) findViewById(R.id.btnDel);
        mBtnEqual = (Button) findViewById(R.id.btnEqual);
        mBtnPoint = (Button) findViewById(R.id.btnPoint);
        mInput = (TextView) findViewById(R.id.input);
        mResult = (TextView) findViewById(R.id.result);
        mError = (TextView) findViewById(R.id.error);


        class Calculate {
            public void main(String[] args) {
                List<String> listCalc = new ArrayList<String>();
                listCalc = new ArrayList<String>();
                listCalc.add(mBtn0.getText().toString());
                listCalc.add(mBtn1.getText().toString());
                listCalc.add(mBtn2.getText().toString());
                listCalc.add(mBtn3.getText().toString());
                listCalc.add(mBtn4.getText().toString());
                listCalc.add(mBtn5.getText().toString());
                listCalc.add(mBtn6.getText().toString());
                listCalc.add(mBtn7.getText().toString());
                listCalc.add(mBtn8.getText().toString());
                listCalc.add(mBtn9.getText().toString());
                listCalc.add(mBtnPlus.getText().toString());
                listCalc.add(mBtnMinus.getText().toString());
                listCalc.add(mBtnMultiply.getText().toString());
                listCalc.add(mBtnDivide.getText().toString());
                listCalc.add(mBtnPoint.getText().toString());
                listCalc.add(mBtnEqual.getText().toString());
                listCalc.add(mBtnDel.getText().toString());



                List<String> list = new ArrayList<String>();
                String stNum = "";  
                String stOpe = "";  


                for (;;) {
                    System.out.println();
                    System.out.println("");
                    Scanner sc1 = new Scanner(System.in);
                    stNum = sc1.nextLine();

                    System.out.println();
                    System.out.println("");
                    Scanner sc2 = new Scanner(System.in);
                    stOpe = sc2.nextLine();

                    if (stOpe.equals("=")) {

                        list.add(stNum);
                        break;

                    } else if ((stOpe.equals("+")) || (stOpe.equals("-")) || (stOpe.equals("*")) || (stOpe.equals("/"))) {

                        list.add(stNum);
                        list.add(stOpe);
                    }
                }
            }

            private int calcProsess(List<String> list) {

                for (int i = 0; i < list.size(); i++) {
                    if (list.get(i).toString().equals("*")) {

                        int st = 0;
                        st = Integer.parseInt(list.get(i - 1).toString()) * Integer.parseInt(list.get(i + 1).toString());


                        list.set((i - 1), String.valueOf(st));
                        list.remove(i + 1);
                        list.remove(i);
                        i = i - 1;

                    } else if (list.get(i).toString().equals("/")) {

                        int st = 0;
                        st = Integer.parseInt(list.get(i - 1).toString()) / Integer.parseInt(list.get(i + 1).toString());


                        list.set((i - 1), String.valueOf(st));
                        list.remove(i + 1);
                        list.remove(i);
                        i = i - 1;
                    }
                }

                int answer = 0;

                for (int i = 0; i < list.size(); i++) {
                    if (list.get(i).toString().equals("+")) {
                        int st = 0;

                        st = Integer.parseInt(list.get(i - 1).toString()) + Integer.parseInt(list.get(i + 1).toString());

                        list.set((i - 1), String.valueOf(st));

                        list.remove(i + 1);
                        list.remove(i);
                        i = i - 1;

                    } else if (list.get(i).toString().equals("-")) {
                        int st = 0;
                        st = Integer.parseInt(list.get(i - 1).toString()) - Integer.parseInt(list.get(i + 1).toString());

                        list.set((i - 1), String.valueOf(st));
                        list.remove(i + 1);
                        list.remove(i);
                        i = i - 1;
                    }
                }

                System.out.println();
                answer = Integer.parseInt(list.get(0).toString());


                mBtn1.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {
                        if (mIsNew) {

                            welcomeMessage.setVisibility(View.INVISIBLE);
                            errorMessage.setVisibility(View.INVISIBLE);

                            mResult.setText("");
                            mInput.setText("");
                            mIsNew = false;
                        }

                        mProcess = mResult.getText().toString();
                        mResult.setText(mProcess + "1");
                    }
                });

                mBtn2.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {
                        if (mIsNew) {

                            welcomeMessage.setVisibility(View.INVISIBLE);
                            errorMessage.setVisibility(View.INVISIBLE);

                            mResult.setText("");
                            mInput.setText("");
                            mIsNew = false;
                        }

                        mProcess = mResult.getText().toString();
                        mResult.setText(mProcess + "2");
                    }
                });

                mBtn3.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {
                        if (mIsNew) {

                            welcomeMessage.setVisibility(View.INVISIBLE);
                            errorMessage.setVisibility(View.INVISIBLE);

                            mResult.setText("");
                            mInput.setText("");
                            mIsNew = false;
                        }

                        mProcess = mResult.getText().toString();
                        mResult.setText(mProcess + "3");
                    }
                });

                mBtn4.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {
                        if (mIsNew) {

                            welcomeMessage.setVisibility(View.INVISIBLE);
                            errorMessage.setVisibility(View.INVISIBLE);

                            mResult.setText("");
                            mInput.setText("");
                            mIsNew = false;
                        }

                        mProcess = mResult.getText().toString();
                        mResult.setText(mProcess + "4");
                    }
                });

                mBtn5.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {
                        if (mIsNew) {

                            welcomeMessage.setVisibility(View.INVISIBLE);
                            errorMessage.setVisibility(View.INVISIBLE);

                            mResult.setText("");
                            mInput.setText("");
                            mIsNew = false;
                        }

                        mProcess = mResult.getText().toString();
                        mResult.setText(mProcess + "5");
                    }
                });

                mBtn6.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {
                        if (mIsNew) {

                            welcomeMessage.setVisibility(View.INVISIBLE);
                            errorMessage.setVisibility(View.INVISIBLE);

                            mResult.setText("");
                            mInput.setText("");
                            mIsNew = false;
                        }

                        mProcess = mResult.getText().toString();
                        mResult.setText(mProcess + "6");
                    }
                });

                mBtn7.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {
                        if (mIsNew) {

                            welcomeMessage.setVisibility(View.INVISIBLE);
                            errorMessage.setVisibility(View.INVISIBLE);

                            mResult.setText("");
                            mInput.setText("");
                            mIsNew = false;
                        }

                        mProcess = mResult.getText().toString();
                        mResult.setText(mProcess + "7");
                    }
                });

                mBtn8.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {
                        if (mIsNew) {

                            welcomeMessage.setVisibility(View.INVISIBLE);
                            errorMessage.setVisibility(View.INVISIBLE);

                            mResult.setText("");
                            mInput.setText("");
                            mIsNew = false;
                        }

                        mProcess = mResult.getText().toString();
                        mResult.setText(mProcess + "8");
                    }
                });

                mBtn9.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {
                        if (mIsNew) {

                            welcomeMessage.setVisibility(View.INVISIBLE);
                            errorMessage.setVisibility(View.INVISIBLE);

                            mResult.setText("");
                            mInput.setText("");
                            mIsNew = false;
                        }

                        mProcess = mResult.getText().toString();
                        mResult.setText(mProcess + "9");
                    }
                });

                mBtn0.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {
                        if (mIsNew) {

                            welcomeMessage.setVisibility(View.INVISIBLE);
                            errorMessage.setVisibility(View.INVISIBLE);

                            mResult.setText("");
                            mInput.setText("");
                            mIsNew = false;
                        }

                        mProcess = mResult.getText().toString();
                        mResult.setText(mProcess + "0");
                    }
                });

                mBtnDel.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {

                        welcomeMessage.setVisibility(View.INVISIBLE);
                        errorMessage.setVisibility(View.INVISIBLE);
                        mResult.setText("");
                        mInput.setText("");
                    }
                });

                mBtnPoint.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {
                        if (mIsNew) {

                            welcomeMessage.setVisibility(View.INVISIBLE);
                            errorMessage.setVisibility(View.INVISIBLE);

                            mResult.setText("");
                            mInput.setText("");
                            mIsNew = false;
                        }

                        mProcess = mResult.getText().toString();
                        mResult.setText(mProcess + ".");
                    }
                });

                mBtnPlus.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {

                        if (!mResult.getText().toString().equals("")) {

                            mValueOne = Double.parseDouble(mResult.getText() + "");
                            mProcess = mResult.getText().toString();
                            mResult.setText(mProcess + "+");
                            mIsNew = false;

                        }

                        mCalculation = 1;
                    }
                });

                mBtnMinus.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {

                        if (!mResult.getText().toString().equals("")) {

                            mValueOne = Double.parseDouble(mResult.getText() + "");
                            mProcess = mResult.getText().toString();
                            mResult.setText(mProcess + "-");
                            mIsNew = false;

                        }

                        mCalculation = 2;
                    }
                });

                mBtnMultiply.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {

                        if (!mResult.getText().toString().equals("")) {

                            mValueOne = Double.parseDouble(mResult.getText() + "");
                            mProcess = mResult.getText().toString();
                            mResult.setText(mProcess + "×");
                            mIsNew = false;

                        }

                        mCalculation = 3;
                    }
                });

                mBtnDivide.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {

                        if (!mResult.getText().toString().equals("")) {

                            mValueOne = Double.parseDouble(mResult.getText() + "");
                            mProcess = mResult.getText().toString();
                            mResult.setText(mProcess + "÷");
                            mIsNew = false;

                        }

                        mCalculation = 4;
                    }
                });

                mBtnEqual.setOnClickListener(new View.OnClickListener() {
                    @SuppressLint("SetTextI18n")
                    @Override
                    public void onClick(View v) {
                        //mValueOne (+, -, x, ÷)
                        String stBuff1 = mResult.getText().toString();
                        String stBuff2;
                        //mValueOne (+, -, x, ÷) mValueTwo
                        stBuff2 = stBuff1.substring(mProcess.length());
                        //mValueTwo
                        mValueTwo = Double.parseDouble(stBuff2);
                        mInput.setText(stBuff1 + "=");
                        mIsNew = true;

                        DecimalFormat df = new DecimalFormat("#.##");

                        if (mCalculation == 1) {

                            mResult.setText(df.format(mValueOne + mValueTwo) + "");
                        } else if (mCalculation == 2) {

                            mResult.setText(df.format(mValueOne - mValueTwo) + "");
                        } else if (mCalculation == 3) {

                            mResult.setText(df.format(mValueOne * mValueTwo) + "");
                        } else if (mCalculation == 4) {
                            if (mValueTwo == 0) {

                                mResult.setText(null);
                                errorMessage.setVisibility(View.VISIBLE);
                            } else {

                                errorMessage.setVisibility(View.INVISIBLE);
                                int resultat = (int) Math.round(mValueOne / mValueTwo);
                                mResult.setText("" + resultat);

                            }
                        }
                    }
                });

                return answer;
            }
        }
    }
}
...