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:
- How to automatically clear the screen after the result is shown, if I need to start another operation?
- How to limit pressing an operator only once between 2 numbers?
- 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