Für ein Taschenrechnerprogramm verfolge ich alle Ziffern, bevor ein Bediener unterschreibt, und limitiere seine Zahlen auf 12 mit einem Zähler. Wenn ein Bedienerzeichen ausgewählt wird, setzt er den Zähler auf Null zurück. Das Problem dabei ist, dass wenn ich das Zeichen lösche und die Bearbeitung der vorherigen Nummern fortsetze, die Zählung nicht mehr wirksam ist, weil sie nach dem Operator-Zeichen auf 0 zurückgesetzt wurde. Gibt es da einen alternativen Weg?Verfolgen der Ziffern vor dem Operatorzeichen
Vielen Dank im Voraus!
private int numericCounter;
private boolean operatorAssigned;
private int cap = 12;
//if the number of digits is not 12, allow input
if (!(numericCounter >= cap)) {
textView.append(button.getText());
}
//if an operator "+" "-"...
//is rececived set numeric counter to 0
if (operatorAssigned) {
numericCounter = 0;
}
if (numericCounter == 0) {
operatorAssigned = false;
}
//Notification
if (numericCounter >= cap) {
Context context = getApplicationContext();
CharSequence text = "Maximum number of digits(12) reached";
int duration = Toast.LENGTH_SHORT;
//... show one Toast
if (mToast != null) mToast.cancel();
mToast = Toast.makeText(context, text, duration);
mToast.show();
//show another Toast
if (mToast != null) mToast.cancel();
mToast = Toast.makeText(context, text, duration);
mToast.show();
}
//if maximum number of digits allowed
//not equal to 12
//increment numeric counter by 1
if (!(numericCounter >= cap)) {
numericCounter++;
}
//Handles the delete button
findViewById(R.id.delete).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
String text = textView.getText().toString();
if ((!text.isEmpty() && resultComputed == false)) {
String lastText = text.substring(0, text.length() - 1);
textView.setText(lastText);
lastNumeric = true;
//Checks if deleted text is a digit or an operator
if (lastText != "." || lastText != "+" || lastText != "-" || lastText != "/" || lastText != "/") {
numericCounter--;
}
} else if ((!text.isEmpty() && resultComputed == true)) {
textView.setText(txt);
resultComputed = false;
}
}
});
Vielleicht setzen Sie ein Flag beim Start/Reset oder wenn ein Bediener eingegeben wird (oder gleich oder funktioniert, wenn/wenn Sie diese haben); Löschen Sie die Markierung, wenn ein Operator gelöscht wird. Wenn bei der Eingabe einer Ziffer das Flag gesetzt wird, dann wird die Ziffernanzahl zurückgesetzt. – TripeHound