public class Osajoukko {
    public final static int KOKO = 20;

    public static boolean[] uusi() {
        return new boolean[KOKO+1];
    }

    public static void lisaa(boolean[] joukko, int luku) {
        joukko[luku] = true;
    }

    public static void poista(boolean[] joukko, int luku) {
        joukko[luku] = false;
    }

    public static boolean kuuluu(boolean[] joukko, int luku) {
        return joukko[luku];
    }

    public static void tulosta(boolean[] joukko) {
        for (int i = 1; i <= KOKO; i++) {
            if (kuuluu(joukko, i)) System.out.print(i + " ");
        }
        System.out.println();
    }

    public static boolean[] leikkaus(boolean[] x, boolean[] y) {
        boolean[] z = uusi();
        for (int i = 1; i <= KOKO; i++) {
            if (x[i] && y[i]) z[i] = true;
        }
        return z;
    }

    public static boolean[] yhdiste(boolean[] x, boolean[] y) {
        boolean[] z = uusi();
        for (int i = 1; i <= KOKO; i++) {
            if (x[i] || y[i]) z[i] = true;
        }
        return z;
    }

    public static void main(String[] args) {
        boolean[] a = uusi();
        lisaa(a, 3);
        lisaa(a, 5);
        lisaa(a, 8);
        lisaa(a, 9);
        System.out.println("Joukon a sisältö:");
        tulosta(a);

        boolean[] b = uusi();
        lisaa(b, 5);
        lisaa(b, 7);
        lisaa(b, 9);
        lisaa(b, 12);
        lisaa(b, 18);
        lisaa(b, 2);
        System.out.println("Joukon b sisältö:");
        tulosta(b);

        System.out.println("Yhteiset alkiot:");
        tulosta(leikkaus(a, b));

        System.out.println("Kaikki alkiot:");
        tulosta(yhdiste(a, b));

        boolean[] c = uusi();
        lisaa(c, 10);
        System.out.println("10 kuuluu joukkoon c: " + kuuluu(c, 10));
        poista(c, 10);
        System.out.println("10 kuuluu joukkoon c: " + kuuluu(c, 10));
    }
}
