Что-то не так с кодом, который я сделал? - PullRequest
1 голос
/ 06 октября 2019

Таким образом, наш проект полностью посвящен множествам, и он должен отображать объединение, пересечение, разницу, и у меня возникают сомнения в моем коде, потому что в примере, данном нам нашим учителем, элементы набора уже были заданы, и вВывод: в результате объединения и пересечения нет «нулевого» результата, НО наша задача состоит в том, чтобы иметь элементы для ввода пользователем И в моем коде в моем объединении и пересечении есть «нулевой» результат. Это нормально?

  public static void main(String[] args) {


    Scanner scan = new Scanner(System.in);
    Set<Integer> a = new HashSet<Integer>();
    a.addAll(Arrays.asList(new Integer[5]));
    for () {
       //scan code...
    }





    Set<Integer> b = new HashSet<Integer>();
    b.addAll(Arrays.asList(new Integer[5]));
    for () {
       //scan code...
    }

    // UNION

    Set<Integer> union = new HashSet<Integer>(a);
    union.addAll(b);
    System.out.print("\nUnion of the two Set: ");
    System.out.println(union);


    // INTERSECTION

    Set<Integer> intersection = new HashSet<Integer>(a);
    intersection.retainAll(b);
    System.out.print("Intersection of the two Set: ");
    System.out.println(intersection);


    // DIFFERENCE

    Set<Integer> difference = new HashSet<Integer>(a);
    difference.removeAll(b);
    System.out.print("Difference of the two Set: ");
    System.out.println(difference);

}

ВЫХОД: (ДАННЫЙ КОД УЧИТЕЛЯ!)

Объединение двух сетов [0, 1, 2, 3, 4, 5, 7, 8, 9]

Пересечение двух Наборов [0, 1, 3, 4]

Разница двух Наборов [2, 8, 9]

МОЙ ВЫХОД:

Набор A:

3 4 2 1 0

Набор B:

7 4 1 9 8

Объединение двух Набор:[null, 0, 1, 2, 3, 4, 7, 8, 9]

Пересечение двух множеств: [null, 1, 4]

Разница двух множеств:[0, 2, 3]

Ответы [ 3 ]

0 голосов
/ 06 октября 2019

Я согласен с @theincrediblethor, но в качестве объяснения ...

Вы инициализируете Set, как если бы он был массивом. Изначально набор пуст, а массив неинициализирован. Вы не хотите помещать «пустые» целые числа [null, null, null, null, null] в набор, они просто останутся там, даже когда вы добавите реальные входные значения на вход.

Поскольку наборы неНе допускайте дублирования, 4 пустых целых числа отбрасываются при добавлении.

Таким образом, у вас остается 1 ноль и все ваши входные данные.

0 голосов
/ 06 октября 2019

В вашей строке

a.addAll(Arrays.asList(new Integer[5]));

new Integer [5] создает массив из 5 нулевых значений [null, null, null, null, null]

Arrays.asList ()просто превращает его в коллекцию (список) из 5 нулевых значений

a.addAll () добавляет все элементы вашей коллекции в ваш набор и, поскольку значения уникальны, вы добавляете только один нулевой

Так что вам просто нужно удалить эту строку, то же самое для Set b

Попробуйте этот код, и вы увидите шаг за шагом

import java.util.Set;
import java.util.HashSet;
import java.util.Arrays;

public class Main
{
    public static void main(String[] args) {
        Integer[] arr = new Integer[5];
        System.out.println(Arrays.toString(arr));
        Set<Integer> a = new HashSet<Integer>();
        a.addAll(Arrays.asList(arr));
        System.out.println(a);
        a.add(1);
        System.out.println(a);
    }
}

он печатает

enter image description here

0 голосов
/ 06 октября 2019

У вас есть ноль из-за этих двух строк в вашем коде:

        a.addAll(Arrays.asList(new Integer[5]));
        b.addAll(Arrays.asList(new Integer[5]));

Просто удалите эти две строки, и ваш код должен работать.

...