2013-04-25 3 views
-1

Я пытаюсь сделать калькулятор, который принимает входные данные из строки, используя несколько аргументов.Динамический калькулятор с использованием пользовательского ввода?

Пример: Типы пользователей из: 14 + 20 * 8

Тогда это будет делать математику и возвращают переменную.

Я видел что-то подобное, но код был слишком продвинутым для меня, и это было не совсем то, что я искал. Я просмотрел другие вопросы, и они, похоже, не продвинулись вперед.

Я думал об использовании строкового построителя, а затем разбивал каждый аргумент на переменную, а затем делал математику таким образом, но я не был уверен, как это сделать.

+0

Вы на самом деле написали код? –

+0

google parsing: пара ссылок: http://www.smccd.net/accounts/hasson/C++2Notes/ArithmeticParsing.html (C++, но какой-то хороший псевдо-код), http://www.codeproject.com/ Статьи/88435/Simple-Guide-to-Mathematical-Expression-Parsing (C#, но должны быть переведены в java) – mcalex

+0

@MichaelPerrenoud У меня есть, но я подключаюсь к этой игре Minecraft, и я не уверен, было бы неплохо опубликовать здесь свой код bukkit. Также это на моем другом компьютере. –

ответ

1

Умный способ сделать это с помощью recursive descent parser. Для чего-то более простого, вы можете запретить круглые скобки и потребовать, чтобы пользователь разделил каждый токен на пробел (так что 14 + 20 в порядке, но 14 + 20 не разрешено), затем используйте String # split ("") для разделения токенов , Если первым символом токена является цифра, используйте Integer.parseInt (str), чтобы включить в int; если вы получите NumberFormatException, то это, вероятно, потому, что пользователь не включил пробелы (и вы попытались превратить «14 + 20» в целое число)

+0

Хотя это может разрушить артефакты выражения - он не будет управлять сложностями правил PEMDAS. Эта проблема намного сложнее, чем это. ** –

+0

Он ** должен ** использовать рекурсивный синтаксический анализатор спуска, который отлично справляется с управлением PEDMAS, но из его вопроса это звучало так, будто он предпочел бы использовать rinky -dink parser по любой причине. –

Смежные вопросы