2013-09-02 1 views
-1

Я понимаю, как писать java-алгоритм без скобок.Как написать алгоритм в java для вычисления арифметического выражения с помощью скобок

  1. Создайте два стека: стек операнда и стек оператора.
  2. Когда мы читаем выражение, продолжайте добавлять оператор в один и операнд в другой.
  3. Оператор с более низким приоритетом не может быть сохранен на операторе с более высоким приоритетом. В этом случае мы выставим этот оператор и применим к верхним операндам из стека Операнда и сохраним результат .

Но если оно содержит скобки, такие как [] or {} or(). Какова была бы логика для оценки выражения? например

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

Вы еще что-нибудь пробовали? – hexafraction

+0

Да ... без скобки я пробовал. С логикой скобок мне нужно понять ... Прочитал пару старых блогов, но не мог понять, как это работает. – Suvasis

+0

«Алгоритм подробно» и «Подробный пример» в [Википедии] (http://en.wikipedia.org/wiki/Shunting-yard_algorithm) описывает, как обрабатываются круглые скобки. – usr2564301

ответ

0

общий подход для вычисления арифметических выражений заключается в разработке или поиск грамматики для арифметических выражений, смотрите здесь http://www.csse.monash.edu.au/~lloyd/tildeProgLang/Grammar/Arith-Exp/, например, а затем закодировать «рекурсивный спуск парсер». Эти программы имеют структуру, очень близкую к грамматике. Как только вы его увидите, вы оцените этот подход.

3

Вы описываете странную вариацию на Dijkstra's shunting-yard algorithm. Версия Дейкстры была нормой в течение последних 50 лет, и она обрабатывает сгруппированные операции (скобки, скобки, и т. Д.) просто отлично.