Je suis en train d'écrire un programme de calcul de base et j'implémente des décimales. En essayant de concevoir un moyen d'ajouter une décimale à un opérande, je viens au problème de la duplication décimale.Ajouter une décimale à une chaîne si une décimale n'apparaît pas entre la fin de chaîne et les caractères spécifiés
"5.5.5" // shouldn't be possible, ignore second . addition
"5.5 + 5.5" or "5 + 5.5" // wonderful!
J'ai un code comme ceci:
String expression = "";
...
//various methods to append numbers, operators, etc to string
...
addDecimal() {
if (expression.equals("")) {
expression += "0."; // if no operand, assume it's 0-point-something
} else {
if(/* some condition */) {
expression += ".";
//note it is appending a decimal to the end of the expression
//ie at the end of the rightmost operand
}
}
}
Les opérateurs sont +
, -
, *
, /
. Une description plus déclarative de ce que j'essaie de faire est:
check string if it contains a decimal
if not, addDecimal()
if so, split string by operators above, look at the rightmost operand; does it contain a decimal?
if not, addDecimal()
if so, do nothing
par exemple.
expression = "2";
addDecimal(); //expression is now "2."
//append decimal to only operand
expression = "5.5 + 4";
addDecimal(); //expression is now "5.5 + 4."
//append a decimal to rightmost operand
expression = "7.5";
addDecimal(); //expression is now "7.5"
//if an operand contains a decimal already, it cannot have another
expression = "2 + 5";
addDecimal(); //expression is now "2 + 5."
//note the decimal was only appended to the rightmost operand
//ignoring the leftmost operand
La règle est congruent qu'une décimale est seulement ajouté à l'opérande extrême droite, pas à tous les opérandes dans l'expression.
Votre approche semble discutable. Je voudrais réviser les entités que vous utilisez dans votre architecture. Par exemple, je n'ai pas tendance à considérer "5.5 + 4." une expression. Je voudrais d'abord construire un nombre sans respect pour "expression", puis l'insérer dans l '"expression" –
@ AlexeyR.as c'est une calculatrice, il est fait dans les étapes (touches). On peut supposer qu'une personne va entrer un autre nombre après une décimale, ou je considérerais un "4". pour signifier "4.0" comme je l'ai fait avec "." devenant "0". – gator
Je vois. Désolé, il n'était pas très clair quelle était l'entrée supposée. Ensuite, il peut être logique d'implémenter une sorte de machine d'état qui est alimentée par un symbole et prend une décision en fonction de l'état dans lequel il se trouve actuellement. –