2017-05-06 62 views
1

我正在做一個簡單的終端計算器,但由於某種原因,函數不是在while循環內執行,而是在循環外部執行。功能不執行循環內

鑑於此輸入:((1 + 2) + (3 + 4))

它應該輸出:10

但陷在一個無限循環,因爲它不與他們的結果替換最裏面的表達式。

不執行是s.replace(basicOp, answer);

這是問題的一個片段的功能:

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); 
} 

所有的代碼是here只需運行make test

輸入語法是:([number] [operator] [number])([operator] [number])
數字和運算符之間必須有一個空格。
不應該有數字和括號

支持的操作之間的任何空間:

+-/*
%(餘),
div(商),
sqr(廣場),
sqroot(平方根),
sincostan(度,竊聽)
fact(階乘)

它尚未完成,可能還有其他的問題,但這個問題讓我無法推進。

有人可以幫我找到解決辦法嗎?

謝謝。

+0

我創建了這個haXe的庫(https://github.com/markknol/hx-mathparser),但只支持組和+, - ,/和*。也許你可以看看它。 如果你需要更高級的haxe解析器,你可能想看看hscript(https://github.com/HaxeFoundation/hscript),它可以執行許多類型的Haxe代碼。 –

+0

@MarkKnol我會盡我所能檢查你的圖書館,謝謝你的提示。 –

回答

3

我實際上得不到這個運行,但是StringTools.replace()不會在原地修改字符串。

嘗試改變s.replace(basicOp, answer);s = s.replace(basicOp, answer);

+0

也許它不會運行,因爲我的意思是'make test',但是writed'make run',對不起。解決了它,我只需要分配結果,謝謝。 –