Ich mache einen einfachen Terminal-Rechner, aber aus irgendeinem Grund wird eine Funktion nicht innerhalb einer While-Schleife ausgeführt, sondern außerhalb der Schleife ausgeführt.Funktion führt nicht innerhalb der Schleife aus
diesen Eingang Gegeben: ((1 + 2) + (3 + 4))
Es soll Ausgabe: 10
aber wird in einer Endlosschleife stecken, weil es nicht die innersten Ausdrücke mit ihrem Ergebnis ersetzt.
Die Funktion, die nicht benötigten s.replace(basicOp, answer);
Hier ist ein Ausschnitt des Problems ist: ([number] [operator] [number])
:
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);
}
der Code nur make test
Die Eingabesyntax ist Alles ist here laufen oder ([operator] [number])
Zwischen Nummer und Operatoren muss ein Leerzeichen stehen.
Es sollte keinen Raum zwischen Zahlen und Klammern seines
unterstützte Operationen:
+
-
/
*
%
(Rest),
div
(Quotient),
sqr
(Quadrat),
(Quadratwurzel),
sin
cos
tan
(in Grad, abgehört)
fact
(Fakultät)
Es noch nicht abgeschlossen ist, kann es andere Probleme, aber dieses Problem hindert mich voran.
Kann jemand mir helfen, die Lösung zu finden?
Vielen Dank.
ich eine haxe Bibliothek für diese erstellt (https://github.com/markknol/hx-mathparser), aber das nur unterstützt Gruppen und +, -,/und *. Vielleicht kannst du es dir anschauen. Wenn Sie erweiterte haxe Parser benötigen, sollten Sie sich hscript (https://github.com/HaxeFoundation/hscript) ansehen, die viele Arten von Haxe-Code ausführen kann. –
@MarkKnol Ich werde Ihre Bibliothek überprüfen, wenn ich kann, danke für die Tipps. –