Запомните последнее действие в приложении «Калькулятор Android» - PullRequest
0 голосов
/ 25 мая 2020

У меня домашнее задание по созданию калькулятора в студии android. Я создал числа и кнопки действий, я поместил числа в переменную, а затем отрендерил их в объект EditText для отображения в шаблоне.

все работает нормально, но когда я установить синтаксический анализ следующим образом 1+1-1 я получаю -1 instand из 1, это происходит из-за его перезаписи значения lastaction ehrn я нажимаю противоположную кнопку.

ПРИМЕР ВИДЕО:

https://i.imgur.com/N7m6rA3.mp4

КОД:

package com.example.calculator;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.EditText;

public class MainActivity extends AppCompatActivity {


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

    boolean equalWasPressed = false, showResults = false;
    String lastAction, plastAction;
    int num1 = Integer.MIN_VALUE, num2 = Integer.MIN_VALUE, temp = Integer.MIN_VALUE; // acting like null
    final int ONE = 1, TWO = 2, THREE = 3, FOUR = 4, FIVE = 5, SIX = 6, SEVEN = 7, EIGHT = 8, NINE = 9, ZERO = 0;
    final String PLUS = "+", MINUS = "-";

    public void renderScreen() {
        EditText screenEditText = findViewById(R.id.screen);
        String textToShow = "0";
        if (temp == Integer.MIN_VALUE && num1 == Integer.MIN_VALUE && num2 == Integer.MIN_VALUE) {
            textToShow = "";
        } else if (num1 != Integer.MIN_VALUE && showResults) {
            textToShow = String.valueOf(num1);
        } else {
            if (num1 == Integer.MIN_VALUE && lastAction == MINUS) {
                textToShow = (temp == Integer.MIN_VALUE) ? "0" : String.valueOf(MINUS + temp);
                temp *= -1;
            } else if (num1 == Integer.MIN_VALUE) {
                textToShow = (temp == Integer.MIN_VALUE) ? "0" : String.valueOf(temp);
            } else if (num1 != Integer.MIN_VALUE && temp != Integer.MIN_VALUE) {
                textToShow = String.valueOf(num1) + lastAction + String.valueOf(temp);
            } else if (num1 != Integer.MIN_VALUE) {
                textToShow = String.valueOf(num1) + lastAction;
            } else if (num1 != Integer.MIN_VALUE && num2 != Integer.MIN_VALUE) {
                textToShow = String.valueOf(num1) + lastAction + String.valueOf(num2);
            }
        }
        screenEditText.setText(textToShow);
    }

    public void sendValue(int number) {
        showResults = false;
        if (temp == Integer.MIN_VALUE) {
            temp = number;
        } else {
            temp *= 10;
            temp += number;
        }
    }
    public void setAction(String action){
        lastAction = action;
    }
    public void placeTemp() {
        Log.i("case","clicked");
        if (equalWasPressed) {
            if (num1 != Integer.MIN_VALUE && temp != Integer.MIN_VALUE) {
                num1 = (lastAction.equals(PLUS)) ? num1 + temp : num1 - temp;
                num2 = temp = Integer.MIN_VALUE;
                showResults = true;
            }
            equalWasPressed = false;
        } else {
            showResults = false;
            if (num1 == Integer.MIN_VALUE) {
                num1 = temp;
                temp = Integer.MIN_VALUE;
            } else if (num2 == Integer.MIN_VALUE && temp != Integer.MIN_VALUE) {
                if (lastAction.equals(PLUS)) {
                    num1 += temp;
                } else if (lastAction.equals(MINUS)) {
                    num1 -= temp;
                }
                temp = Integer.MIN_VALUE;
            } else if (num2 == Integer.MIN_VALUE) {
                num2 = temp;
                temp = Integer.MIN_VALUE;
            } else {
                if (lastAction.equals(PLUS)) {
                    num1 += num2;
                } else if (lastAction.equals(MINUS)) {
                    num1 -= num2;
                }
                num2 = Integer.MIN_VALUE;
                temp = Integer.MIN_VALUE;
            }
        }
    }

    public void buttonClicked(View v) {
        switch (v.getId()) {
            case R.id.button1:
                sendValue(ONE);
                break;
            case R.id.button2:
                sendValue(TWO);
                break;
            case R.id.button3:
                sendValue(THREE);
                break;
            case R.id.button4:
                sendValue(FOUR);
                break;
            case R.id.button5:
                sendValue(FIVE);
                break;
            case R.id.button6:
                sendValue(SIX);
                break;
            case R.id.button7:
                sendValue(SEVEN);
                break;
            case R.id.button8:
                sendValue(EIGHT);
                break;
            case R.id.button9:
                sendValue(NINE);
                break;
            case R.id.button0:
                sendValue(ZERO);
                break;
            case R.id.buttonC:
                num1 = num2 = temp = Integer.MIN_VALUE; // reset variables
                lastAction = PLUS;
                break;
            case R.id.buttonPlus:
                setAction(PLUS);
                lastAction = "+";
                placeTemp();
                break;
            case R.id.buttonMinus:
                setAction(MINUS);
                placeTemp();
                break;
            case R.id.buttonEqual:
                equalWasPressed = true;
                placeTemp();
                break;
        }
        renderScreen();
    }
}

Я не могу придумать способ исправить это. Надеюсь, ты сможешь мне помочь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...