Я изучаю java, хотел написать калькулятор для андроида, написал дизайн и т.д. И когда пришол к вычислению примера, у меня возникли вопросы, а как вобще все вычислется? Думал както через ArrayList и for сделаю, но нихера, помогите как сделать вычисление примера? Например : 2*2/9+5-8
Сделай метод, который парсит строку и делает первое вычисление * или / пока оно есть и давать на выход строку. Он будет работать, пока все операторы * / не выполнятся. Потом такая же хрень с + -.
Типа 2*2/9+5-8 в 4/9+5-8 и т.д.
В универе нас учили превращать традиционное математическое выражение в польскую постфиксную запись, а потом работать с этой записью при помощи стека.
Например, 2*2/9+5-8 в польской записи будет так: 2 2 * 9 / 5 + 8 - Операнды идут в том же порядке, что и в исходном выражении.
А операции - в порядке их выполнения, причем всегда после своих операндов.
Разбор идет слева направо.
Если видим операнд - кладем его в стек.
Если видим операцию - достаем из стека два операнда, применяем к ним операцию, результат кладем в стек.
По окончании разбора в стеке будет одно число - значение выражения.
Для примера разберем польскую запись в вашем случае: 2 2 * 9 / 5 + 8 - 2 - кладем в стек. [ 2 2 - тоже кладем в стек. [ 2 2 * - достаем из стека 2 и 2, считаем 2 * 2 = 4, кладем в стек. [ 4 9 - кладем в стек [ 4 9 / - достаем из стека 9 и 4, считаем 4 / 9 = 0,4444, кладем в стек. [ 0,4444 5 - кладем в стек. [ 0,4444 5 + - достаем из стек 5 и 0,4444, считаем 0,4444 + 5 = 5,4444, кладем в стек. [ 5,4444 8 - кладем в стек. [ 5,4444 8 - - достаем из стека 8 и 5,4444, считаем 5,4444 - 8 = -2,5556, кладем в стек. [ -2,5556 Разбор окончен. Ответ: -2,5556.
А вот как на основе выражения построить польскую запись - это отдельная история
калькуляторы реализуются несколькими способами
1 это когда программа сама считает1+1+1 и тд
2 способ на котором основаны почти все калькуляторы это через память когда все возможные в нем решения уже посчитаны и набирая пример - открывается соответствующая ячейка памяти