我正在做一个简单的终端计算器,但由于某种原因,函数不是在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我会尽我所能检查你的图书馆,谢谢你的提示。 –