2017-04-21 1 views
1

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; 
 

 
    } 
 

 

 

 
    } 
 
});

+0

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

Antwort

0

könnten Sie einen Stapel versuchen, eine Geschichte der Zähler zu halten. Wenn Sie den Stack auf 2 begrenzen, erhalten Sie den Zähler für die aktuelle Nummer und den für die vorherige Nummer. Dann müssen Sie nur den Stapel verwalten, wenn Sie Zeichen hinzufügen/löschen.

0

Erstellen Sie einfach eine Sicherungsvariable. so etwas wie

private int backUp = 0; 

Dann in Ihrer if(operatorAssigned) Funktion, dies tun:

backUp = numericCounter; 
numbericCounter = 0; 

Auf diese Weise, ob und wann Sie für Ihre Löschung Betreiber überprüfen, nur den Wert von backUp zu Ihrem numericCounter zuweisen wieder .

Dies ist nur eine sehr grundlegende Idee.

Verwandte Themen