2013-09-02 1 views
-1

대괄호없이 자바 알고리즘을 작성하는 방법을 알고 있습니다.자바에서 알고리즘을 작성하여 대괄호로 산술 표현식을 계산하는 방법

  1. 피연산자 스택과 연산자 스택의 두 스택을 만듭니다.
  2. 표현식을 읽으면서 하나의 연산자를 계속 추가하고 다른 하나의 피연산자를 계속 추가합니다.
  3. 우선 순위가 낮은 운영자는 우선 순위가 높은 운영자에게 저장할 수 없습니다. 이 경우 우리는 해당 연산자를 pop하고 Operand 스택의 최상위 피연산자에 적용하고 결과를 그대로 유지합니다.

그러나 대괄호 (예 : [] or {} or())가 포함 된 경우. 표현을 평가하는 논리는 무엇입니까? 예를 들어

([12*3] + (8/2)) + (5+5)/(4*2)-3+(7-3) 
+1

아직 시도해 보셨나요? – hexafraction

+0

예. 브라켓없이 나는 노력했다. 브래킷 논리를 사용하면 이해할 필요가 있습니다. 오래된 블로그를 점검했지만 작동 방식을 파악할 수 없었습니다. – Suvasis

+0

[Wikipedia] (http://en.wikipedia.org/wiki/Shunting-yard_algorithm)의 "알고리즘에 대한 자세한 설명"및 "자세한 예제"에서는 괄호의 처리 방법을 설명합니다. – usr2564301

답변

0

산술 식을 평가하는 일반적인 방법은 개발 또는 산술 식의 문법을 조회, 여기 http://www.csse.monash.edu.au/~lloyd/tildeProgLang/Grammar/Arith-Exp/ 예를 참조 후 "재귀 하강 파서"코드입니다. 이러한 프로그램은 문법에 매우 근접한 구조를 가지고 있습니다. 일단 당신이 하나를 볼 당신이 접근 방식을 주셔서 감사합니다.

3

Dijkstra의 shunting-yard algorithm에 이상한 변형이 있음을 설명하고 있습니다. Dijkstra의 버전은 지난 50 년간의 표준이었으며 그룹화 된 작업 (괄호, 대괄호, )을 잘 처리합니다.

관련 문제