Это проект курса по алгоритмам, над которым я работаю:
Задача состоит в создании типа данных, представляющего традиционный математический набор внутри юниверса. Методы, которые должны быть включены для управления типом данных, - это такие вещи, как объединение, пересечение и т. Д. 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;
}