函数不在循环

时间:2017-05-06 02:07:35

标签: haxe

我正在制作一个简单的终端计算器,但由于某种原因,函数不在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(阶乘)

尚未完成,可能还有其他问题,但这个问题使我无法前进。

有人可以帮我找到解决方案吗?

谢谢。

0 个答案:

没有答案