Использование String для математики - PullRequest
0 голосов
/ 20 марта 2020

Я пытаюсь сделать калькулятор, который позволяет выполнять несколько операций (например, 4 + 3-2 + 5). Моя основная идея c о том, как это сделать, заключается в использовании l oop:

for (int i = 0; i < nums.length; i++) {
                switch (nums[i]) {
                case add:
                    while (func.size() < i) {
                        func.add(0);
                    }
                    func.add(i, 1);
                    type = "+";
                    break;
                 //More cases for other operations

Пара замечаний: nums.length ссылается на массив, который содержит входное уравнение, разделенное следующим образом: nums = equation.split("(?<=[-+*/%])|(?=[-+*/%])")

В идеале, когда у меня будет значение 'type', я смогу заставить мою программу вычислить уравнение следующим образом:

for(int i = 1; i < nums.length; i++) {      
    ans = eq.get(0) type eq.get(func.indexOf(1)+i);
        }

Еще одно небольшое замечание: eq - это arraylist со всеми значениями nums.

В значительной степени я хочу, чтобы type стал математическими операциями, такими как +, -, et c. Я знаю, что этот код ужасно нарушен, как я показал здесь, но я просто написал кое-что, чтобы привести пример того, чего я хочу достичь sh. Я смотрел на другие вопросы, подобные этому, где было решение использовать класс Math и вызывать функции из этого, но это не работает в моей программе. У кого-нибудь есть мысли о том, как этого добиться? Спасибо!

1 Ответ

0 голосов
/ 20 марта 2020

Похоже, вы пытаетесь использовать синтаксически-ориентированный интерпретатор, а не абстрактный. Я настоятельно рекомендую изучить это, особенно если вы хотите, чтобы ваш калькулятор следовал порядку операций (что, я полагаю, вы делаете). Вот отличный пример этого:

https://lambda.uta.edu/cse5317/notes/node24.html

Лично, вместо того, чтобы разбивать ваше входное уравнение, рассматривая оператор как разделитель, я думаю, что это будет проще построить конструктор с указанными вручную классами. Я бы сделал полное выражение оператора, состоящее из аргументов оператора (строки) и целого числа, чтобы начать, а затем добавил к нему по мере необходимости. Что-то вроде:

abstract class Expression {

class Equation extends Expression {
public String operator; //Operator
public Expression left; //Left hand side
public Expression right;//Right hand side
public Equation(String o, Expression l, Expression r) {operator = o, left = l, /n 
right = r}; //Constructor for the Equation
}

Затем вы можете добавить к этому, чтобы создать сценарий ios для различных типов уравнений. Имейте в виду, что левая сторона, правая сторона и оператор произвольны. Вы можете создавать уравнения с операторами слева и справа, чтобы учесть несколько операций. Определенно отличается от того, как у вас это настроено, но, надеюсь, это поможет.

...