В последнее время я возвращаюсь к кодированию (давно не делал). Я пытаюсь написать программу, которая будет сохранять и выполнять операции над множествами в левом ассоциативном порядке вместо правого ассоциативного.
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
Буду очень признателен, если у кого-нибудь есть какие-либо советы о том, как я могу решить эту проблему.