我正在做一個簡單的終端計算器,但由於某種原因,函數不是在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
(平方根),
sin
cos
tan
(度,竊聽)
fact
(階乘)
它尚未完成,可能還有其他的問題,但這個問題讓我無法推進。
有人可以幫我找到解決辦法嗎?
謝謝。
我創建了這個haXe的庫(https://github.com/markknol/hx-mathparser),但只支持組和+, - ,/和*。也許你可以看看它。 如果你需要更高級的haxe解析器,你可能想看看hscript(https://github.com/HaxeFoundation/hscript),它可以執行許多類型的Haxe代碼。 –
@MarkKnol我會盡我所能檢查你的圖書館,謝謝你的提示。 –