При создании типа данных в Java, каков наилучший способ построить конструктор для создания двух разных массивов, которые будут частью каждого экземпляра? - PullRequest
1 голос
/ 01 мая 2020

Это проект курса по алгоритмам, над которым я работаю:

Задача состоит в создании типа данных, представляющего традиционный математический набор внутри юниверса. Методы, которые должны быть включены для управления типом данных, - это такие вещи, как объединение, пересечение и т. Д. c. которые требуют сравнения между двумя экземплярами класса / типа данных. То, как курс хочет, чтобы я делал это, создавая массив логических значений для представления фактического набора, что достаточно просто, если вы берете массив фактического набора, копируете его в логический массив такой же длины и переключаете true или ложь в зависимости от наличия значения в наборе. Вот что я придумал:

public class MathSET{

    private int size = 0;
    private Boolean[] currentSet;
    private Character[] universe;

    public MathSET(Character[] uni){
        if (uni.length == 0){
            System.out.println("Set cannot be created, universe cannot be null.");
        } else{
            universe = createUni(uni);
            currentSet = new Boolean[universe.length];
                for (int i = 0; i < universe.length; i++){
                    currentSet[i] = false;
                }
            }
    }

createUni приводит к методу, который сортирует, удаляет дубликаты и изменяет размер массива юниверса перед его возвратом, а currentSet создается как логический массив со всеми значения установлены на «ложь».

Моя самая большая проблема в том, что я не могу вызвать метод дополнения, который должен возвращать новый экземпляр MathSET со значениями, не включенными в текущий набор. Я могу создать массив с правильными значениями, которые представляют собой дополнение, но я не могу создать новый MathSET (Boolean Array) с тем же универсальным массивом. Я также обнаружил, что при сравнении массивов юниверсов для двух экземпляров типа данных, чтобы убедиться, что они на самом деле сопоставимы, сравнение (сопоставимый. Юниверс! = Этот. Юниверс) всегда дает мне результат, что эти два массива не являются равно и не может быть сравнено.

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

Редактировать: Поскольку кто-то спросил метод дополнения:

public MathSET complement(){
    /**Creates a new MathSET boolean array that starts out empty, iterates through current MathSET currentSET array and adds 
    */
    MathSET complement = new MathSET(universe);
    StringBuilder comp = new StringBuilder("Complement to current set: ");
    for (int i = 0; i < currentSet.length; i++){
        if (this.currentSet[i] == false){
            complement.currentSet[i] = true;
            comp.append(complement.currentSet[i] + ", ");
        }
    }

    System.out.println(comp);
    return complement;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...