2017-05-06 7 views
1

저는 간단한 터미널 계산기를 만들고 있지만 어떤 이유로 함수가 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); 
} 

모든 코드가 here 만 입력 구문은 make test

실행 또는 ([operator] [number])
숫자와 운영자 사이에 하나의 공백이 있어야합니다.

+-/*
% (나머지),
div (지수),
sqr (사각형),
:
숫자와 괄호

지원 작업 사이의 공간이 안됩니다 sqroot (제곱근),
(도청 각도)costan
fact 그것은 거기에 다른 문제가 될 수 있지만이 문제는 발전에서 저를 방지 할 수 있습니다, 아직 완료되지 않은

(계승).

누군가 해결책을 찾도록 도와 줄 수 있습니까?

감사합니다.

+0

s = s.replace(basicOp, answer);에 변화

시도 (https://github.com/markknol/hx-mathparser) 만 그룹과 +, 지원 -, /와 *을. 어쩌면 당신은 그것을 볼 수 있습니다. 고급 haxe 파서가 필요한 경우 다양한 유형의 Haxe 코드를 실행할 수있는 hscript (https://github.com/HaxeFoundation/hscript)를 살펴볼 수 있습니다. –

+0

@ MarkKnol 할 수있을 때 도서관을 점검 할 것입니다. 팁 주셔서 감사합니다. –

답변

3

실제로이 작업을 실행할 수는 없지만 StringTools.replace()는 문자열을 현재 위치에서 수정하지 않습니다. 나는 이것에 대한 haxe 라이브러리를 생성 s.replace(basicOp, answer);

+0

아마도'make test '를 의미했기 때문에 실행되지 않을 수 있습니다.하지만'make run'이라고 말하면서 미안합니다. 그게 해결 됐어, 그저 결과를 지정해야 했어, 고마워. –

관련 문제