2017-05-06 1 views
1

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),
sincostan (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.

+0

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. –

+0

@MarkKnol Ich werde Ihre Bibliothek überprüfen, wenn ich kann, danke für die Tipps. –

Antwort

3

Ich kann dies nicht tatsächlich ausführen, aber StringTools.replace() ändert die Zeichenfolge nicht an Ort und Stelle.

Versuchen Sie, s.replace(basicOp, answer); zu s = s.replace(basicOp, answer);

+0

Vielleicht läuft es nicht, weil ich "make test" meinte, sondern write 'make run', sorry dafür. Das hat es gelöst, ich musste nur das Ergebnis zuweisen, danke. –

Verwandte Themen