Как я могу использовать интерфейс Java для вычисления объединения, пересечения и разности двух множеств, все в методе по умолчанию в интерфейсе? - PullRequest
0 голосов
/ 13 февраля 2019

Я новичок в Java, так что извините, если это супер базовый.Мне нужно сделать методы по умолчанию в интерфейсе ISet, чтобы учесть объединение, пересечение и разность двух наборов, созданных в классе, который реализует этот интерфейс.Я знаю, как рассчитать все это, но я не знаю, как сделать это синтаксически в интерфейсе, поскольку он использует объекты интерфейса, а не структуры данных в реализующих классах.

Код:

public interface ISet {

void add(Integer val);

Integer removePos(int pos);

boolean contains(Integer val);

int getSize();

default void union(ISet unionWith) {
    //List<Integer>unionSet = new ArrayList<>();
    //unionSet.add(unionWith);
    //List set = new ArrayList();
    //set.addAll(0, unionWith);
    //ISet unionSet = this;
    // To call in main: this.union(unionWith)
    // For my variables it would be mySet.union(mySet2)
    //this.getSize();
    int size1 = this.getSize();
    int size2 = unionWith.getSize();
    if(this == unionWith) {

    }
    //List<Integer> unionList = Arrays.asList(this);
    ISet allVals = this.add(Integer val);
    for(int i = 0; i < size1 + size2; i++) {
        if(!this.contains(Integer.unionWith));
    }
}

default void intersect(ISet intWith) {

}

default void difference(ISet diffWith) {

}

}

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

Обычно я пытаюсь выяснить подобные вещи самостоятельно, но через 3 часане имея возможности объединить два набора, я понял, что мне просто нужно больше узнать о том, как работают java и интерфейсы.

Я буду очень признателен за любую помощь, которую вы, ребята, можете предложить!

1 Ответ

0 голосов
/ 13 февраля 2019

Может быть, вам нужен метед: целое число get (int pos);

public interface ISet {

void add(Integer val);

Integer get(int pos);

Integer removePos(int pos);

boolean contains(Integer val);

int getSize();

default void union(ISet unionWith) {
    for (int i = 0; i < unionWith.getSize(); i++) {
        this.add(unionWith.get(i));
    }
}

default void intersect(ISet intWith) {
    for (int i = getSize() - 1; i >= 0; i--) {
        Integer value = get(i);
        if (!intWith.contains(value)) {
            removePos(i);
        }
    }
}

default void difference(ISet diffWith) {
    for (int i = getSize() - 1; i >= 0; i--) {
        Integer value = get(i);
        if (diffWith.contains(value)) {
            removePos(i);
        }
    }
}

}

...