Je crée une calculatrice de terminal simple mais pour une raison quelconque, une fonction ne s'exécute pas dans une boucle while mais s'exécute en dehors de la boucle.La fonction n'exécute pas la boucle interne
Compte tenu de cette entrée: ((1 + 2) + (3 + 4))
Il devrait afficher: 10
Mais se coince dans une boucle infinie, car elle ne remplace pas les expressions les plus intimes avec leur résultat.
La fonction qui n'exécute pas est s.replace(basicOp, answer);
Voici un extrait du problème:
public static function processInput(s:String):String
{
var result:Null<Float> = parseNumber(s);
if (result != null)
{
return Std.string(result);
}
var closeParPos:Int = 0;
var openParPos:Int = 0;
var basicOp:String;
var answer:String = "";
// ERROR HERE
while (Std.string(answer) != s)
{
closeParPos = s.indexOf(")");
openParPos = s.lastIndexOf("(", closeParPos);
basicOp = s.substring(openParPos, closeParPos + 1);
answer = processBasicOp(basicOp);
// This isn't executed
s.replace(basicOp, answer);
trace("Input: " + s + " basicOp: " + basicOp + " Answer: " + answer);
}
return (result == null)? "": Std.string(result);
}
Tout le code est here il suffit d'exécuter make test
La syntaxe d'entrée est: ([number] [operator] [number])
ou ([operator] [number])
Il doit y avoir un seul espace entre le nombre et les opérateurs.
Il ne devrait pas y avoir d'espace entre les chiffres et les parenthèses
Opérations prises en charge:
+
-
/
*
%
(reste),
div
(quotient),
sqr
(carré),
sqroot
(racine carrée),
sin
cos
tan
(en degrés, mis sur écoute)
fact
(factoriel)
Il est pas encore terminée, il peut y avoir d'autres problèmes, mais ce problème me empêche d'avancer.
Quelqu'un peut-il m'aider à trouver la solution?
Merci.
J'ai créé une bibliothèque haxe pour cette (https://github.com/markknol/hx-mathparser) mais qui ne supporte que les groupes et +, -,/et *. Peut-être que vous pouvez y jeter un coup d'œil. Si vous avez besoin d'un analyseur haxe plus avancé, vous pouvez jeter un oeil à hscript (https://github.com/HaxeFoundation/hscript), qui peut exécuter plusieurs types de code Haxe. –
@ MarkKnol Je vais vérifier votre bibliothèque quand je peux, merci pour les conseils. –