函数不在循环内执行
Function doesn't execute inside loop
我正在制作一个简单的终端计算器,但出于某种原因,函数没有在 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])
数字和运算符之间必须有一个 space。
数字和括号
之间不应该有任何space
支持的操作:
+
-
/
*
%
(余数),
div
(商),
sqr
(正方形),
sqroot
(平方根),
sin
cos
tan
(以度为单位,有问题)
fact
(阶乘)
还没完成,可能还有其他问题,但是这个问题阻碍了我的前进。
谁能帮我找到解决办法?
谢谢。
我实际上无法将其发送到 运行,但 StringTools.replace() 不会就地修改字符串。
尝试将 s.replace(basicOp, answer);
更改为 s = s.replace(basicOp, answer);
我正在制作一个简单的终端计算器,但出于某种原因,函数没有在 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])
数字和运算符之间必须有一个 space。
数字和括号
支持的操作:
+
-
/
*
%
(余数),
div
(商),
sqr
(正方形),
sqroot
(平方根),
sin
cos
tan
(以度为单位,有问题)
fact
(阶乘)
还没完成,可能还有其他问题,但是这个问题阻碍了我的前进。
谁能帮我找到解决办法?
谢谢。
我实际上无法将其发送到 运行,但 StringTools.replace() 不会就地修改字符串。
尝试将 s.replace(basicOp, answer);
更改为 s = s.replace(basicOp, answer);