lundi 5 septembre 2016

Android Studio Calculator Error - If result is shown how to clear screen before applying new data?

I am just starting out with Java and Android Studio. I have a task to complete for my class - to replicate a simple Calculator. I've managed to make it work but I still have a few errors to fix and couldn't find the solutions on StackOverflow. I think I need to insert a few if-statements, just that I don't exactly know how. Here are my questions:

  1. How to automatically clear the screen after the result is shown, if I need to start another operation?
  2. How to limit pressing an operator only once between 2 numbers?
  3. How to avoid adding an operator or the equal sign before adding any number?

Can anybody help me please? The code is below:

public class MainActivity extends AppCompatActivity {

TextView numbersOnScreen;
TextView equalSign;
TextView delFunction;

private boolean wasLastAddedNumber;

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

    numbersOnScreen = (TextView) findViewById(R.id.calculatorScreen);

    View.OnClickListener onNumberClicked = new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            //TODO check if result is shown and clear the screen before applying new data


            numbersOnScreen.setText(numbersOnScreen.getText() + ((TextView) v).getText().toString());
            wasLastAddedNumber = true;
        }
    };

    View numberView = findViewById(R.id.oneButton);
    numberView.setOnClickListener(onNumberClicked);

    numberView = findViewById(R.id.twoButton);
    numberView.setOnClickListener(onNumberClicked);

    numberView = findViewById(R.id.threeButton);
    numberView.setOnClickListener(onNumberClicked);

    numberView = findViewById(R.id.fourButton);
    numberView.setOnClickListener(onNumberClicked);

    numberView = findViewById(R.id.fiveButton);
    numberView.setOnClickListener(onNumberClicked);

    numberView = findViewById(R.id.sixButton);
    numberView.setOnClickListener(onNumberClicked);

    numberView = findViewById(R.id.sevenButton);
    numberView.setOnClickListener(onNumberClicked);

    numberView = findViewById(R.id.eightButton);
    numberView.setOnClickListener(onNumberClicked);

    numberView = findViewById(R.id.nineButton);
    numberView.setOnClickListener(onNumberClicked);

    numberView = findViewById(R.id.zeroButton);
    numberView.setOnClickListener(onNumberClicked);

    numberView = findViewById(R.id.dotButton);
    numberView.setOnClickListener(onNumberClicked);


    numberView = findViewById(R.id.addButton);
    numberView.setOnClickListener(onNumberClicked);

    numberView = findViewById(R.id.substractButton);
    numberView.setOnClickListener(onNumberClicked);

    numberView = findViewById(R.id.multiplyButton);
    numberView.setOnClickListener(onNumberClicked);


    numberView = findViewById(R.id.divideButton);
    numberView.setOnClickListener(onNumberClicked);


    equalSign = (TextView) findViewById(R.id.equalButton);
    equalSign.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            onEqual();
        }
    });

    delFunction = (TextView) findViewById(R.id.delButton);
    delFunction.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            onDel();

        }
    });

    delFunction.setOnLongClickListener(new View.OnLongClickListener() {
        @Override
        public boolean onLongClick(View v) {
            onLongDel();

            return true;
        }
    });

}

private void onEqual() {
    String txt = numbersOnScreen.getText().toString();
    txt = txt.replaceAll("x", "*").replaceAll("÷", "/");
    Expression expression = new ExpressionBuilder(txt).build();
    double result = expression.evaluate();
    numbersOnScreen.setText(Double.toString(result));


}

private void onDel() {
    String str = numbersOnScreen.getText().toString();
    if (!str.isEmpty()) {
        numbersOnScreen.setText(str.substring(0, str.length() - 1));
    }
}

private void onLongDel() {
    numbersOnScreen.setText("");
}

}

Aucun commentaire:

Enregistrer un commentaire