Come Impostare.contiene() decide se si tratta di un sottoinsieme o no?

Mi aspetto che il codice riportato di seguito mi avrebbe dato un sottoinsieme e di una serie complementare.

Ma, in realtà, il risultato mostra che “Errore: Questo non è un sottoinsieme!”

Che cosa si tratta.next() ottenere e come rivedere il mio codice per ottenere il risultato che voglio?
Grazie!

package Chapter8;

import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;

public class Three {
    int n;
    Set<Integer> set = new HashSet<Integer>();

    public static void main(String args[]) {
        Three three = new Three(10);
        three.display(three.set);
        Set<Integer> test = new HashSet<Integer>();
        Iterator<Integer> it = three.set.iterator();
        while(it.hasNext()) {
            test.add(it.next());
            three.display(test);
            three.display(three.complementarySet(test));
        }

    }

    boolean contains(Set<Integer> s) {
        if (this.set.contains(s))
            return true;
        else 
            return false;
    }

    Set<Integer> complementarySet(Set<Integer> s) {
        if(this.set.contains(s)){
            Set<Integer> result = this.set;
            result.removeAll(s);
            return result;
        }
        else {
            System.out.println("Error: This is not a subset!");
            return null;
        }
    }

    Three() {
        this.n = 3;
        this.randomSet();
    }

    Three(int n) {
        this.n = n;
        this.randomSet();
    }

    void randomSet() {
        while(set.size() < n) {
            set.add((int)(Math.random()*10));
        }
    }

    void display(Set<Integer> s) {
        System.out.println("The set is " + s.toString());
    }
}
Hai bisogno di sapere Impostare api prima di utilizzare Insieme. Si prega di coprire il mio tutorial la vita Interna di HashSet
Il tuo link è rotto, l’articolo è ancora disponibile altrove?

OriginaleL’autore Zoe | 2013-07-24

2 Replies
  1. 2

    Il tuo problema è in questa parte:

    set.contains(s)

    che non fa quello che tu pensi, non prende come argomento un altro Set per vedere se i suoi membri sono contenute nel primoset. Piuttosto guarda se l’argomento passato è nel Set.

    È necessario iterare sui “contenuti” e l’uso set.contains(element) per ogni elemento del contenuto del set.

    OriginaleL’autore morgano

  2. 27

    Si probabilmente desidera utilizzare set.containsAll(Collection <?> C) per verificare se la Raccolta(in questo caso) è un sottoinsieme di “set”. Dal docs: http://docs.oracle.com/javase/7/docs/api/java/util/Set.html#containsAll(java.util.Raccolta)

    boolean containsAll(Collection c)

    Restituisce true se questo set contiene tutti gli elementi specificati
    collezione. Se la raccolta specificato anche questo metodo
    restituisce true se a è un sottoinsieme di questo set.

    OriginaleL’autore gjain

Lascia un commento