私は単純な端末計算機を作っていますが、何らかの理由で関数がwhileループ内で実行されていませんが、ループの外側で実行されます。この入力を考えると関数はループ内で実行されません
:((1 + 2) + (3 + 4))
それはすべき出力:10
しかし、それは彼らの結果に最も内側の式を置き換えることはありませんので、無限ループで立ち往生。実行されません
機能は、ここでs.replace(basicOp, answer);
ある問題の抜粋です:([number] [operator] [number])
:
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);
}
すべてのコードがちょうどmake test
入力構文は実行hereですまたは([operator] [number])
番号とオペレータの間にスペースが1つ必要です。
サポートされる操作番号と括弧の間に空白があってはならない。
+
-
/
*
%
(余り)、
div
(商)、
sqr
(四角)、
sqroot
(平方根)、
sin
cos
tan
(盗聴度、中)
fact
(階乗)それはまだ完了していない
、そこに他の問題であってもよいが、この問題が進行するから私を防ぐことがあります。
誰かが解決策を見つけるのを手助けできますか?
ありがとうございます。
に
s.replace(basicOp, answer);
を変更してみてください。たぶんあなたはそれを見ることができます。 より高度なhaxeパーサが必要な場合は、多くの種類のHaxeコードを実行できるhscript(https://github.com/HaxeFoundation/hscript)をご覧ください。 –@MarkKnol可能であれば、あなたの図書館をチェックします。 –