Как реализовать левую ассоциативность, если после знака оператора есть метод (вместо переменной)? - PullRequest
1 голос
/ 30 января 2020

В последнее время я возвращаюсь к кодированию (давно не делал). Я пытаюсь написать программу, которая будет сохранять и выполнять операции над множествами в левом ассоциативном порядке вместо правого ассоциативного.

SetInterface<BigInteger> performOperation(Scanner in, SetInterface<BigIneger> firstSet) {
      SetInterface<BigInteger> result = new Set<BigInteger>();

      SetInterface<BigInteger> secondSet = nextSet(in); //this line will read the next set, and will call performOperation()

      if (operator == '+') {
            result = ((Set<BigInteger>) firstSet).union((Set) secondSet);
            //I have tried the below two lines of code, but they both did not result in left associtivity
            //result = secondSet.union((Set) firstSet);
            //result = result.union((Set) secondSet);
      }

      return result;


Мой метод объединения в моем классе Set выглядит следующим образом:

public Set union(Set secondSet) {
        Set<T> result = new Set<T>();
        Set<T> secondSetCopy = new Set<T>();

        result.set = (LinkedList<T>) this.set.copy();
        secondSetCopy.set = (LinkedList<T>) secondSet.set.copy();

        while (secondSetCopy.size() > 0) {
            result.add((T) secondSetCopy.get());
            secondSetCopy.remove(secondSetCopy.get());
        }

        return result;
    }

Приведенный выше код приводит к чему-то вроде этого: A + (B + (C + D))
Чего я хотел бы добиться, это: ((A + B) + C) + D


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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...