2017-05-06 63 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',对不起。解决了它,我只需要分配结果,谢谢。 –