// Bu program vector ve Enumeration siniflarını
// Kullanmaktadır. Bilesim, kesisim kümelerini hesaplar
// Ayni zamanda StringTokaniser sınıfını kullanır.

import java.util.*;
import java.awt.*;
import java.applet.Applet;
import java.awt.event.*;

class SetA
{
    public Vector bilesim(Vector list1, Vector list2)
    {
        Vector bilesimVectoru = new Vector();
        String s1,s2;
        Enumeration n1=list1.elements();
        Enumeration n2=list2.elements();
        while(n1.hasMoreElements())
        {
            s1=(String)n1.nextElement();
            bilesimVectoru.addElement(s1);
        }
        while(n2.hasMoreElements())
        {
            s2=(String)n2.nextElement();
            if(!bilesimVectoru.contains(s2))
                bilesimVectoru.addElement(s2);
        }
        return bilesimVectoru;
    }

    public Vector kesisim(Vector list1,Vector list2)
    {
        Vector kesisimVectoru = new Vector();
        String s;
        Enumeration n = list1.elements();
        while(n.hasMoreElements())
        {
            s=(String)n.nextElement();
            if(list2.contains(s))
                kesisimVectoru.addElement(s);
        }
        return kesisimVectoru;
    }

    public Vector fark(Vector list1, Vector list2)
    {
        Vector subst=new Vector();
        String ans;
        Enumeration enm= list1.elements();
        while(enm.hasMoreElements())
        {
            ans=(String)enm.nextElement();
            if(list2.contains(ans))
               continue;
            else
               subst.addElement(ans);

        }
    return subst;
    }

    public Vector bilesimeksikesisim(Vector list1, Vector list2)
    {
        Vector UMI=new Vector();
        String ans1, ans2;
        Enumeration enm1= list1.elements();
        Enumeration enm2= list2.elements();

        while(enm1.hasMoreElements())
        {
            ans1=(String)enm1.nextElement();
            if(list2.contains(ans1))
               continue;
            else
               UMI.addElement(ans1);
        }
        while(enm2.hasMoreElements())
        {
          ans2 = (String)enm2.nextElement();
          if(list1.contains(ans2))
             continue;
          else
             UMI.addElement(ans2);
        }
    return UMI;
}

}

public class  SetTest extends Applet implements ActionListener
{
    SetA    set = new SetA();   // SetA
    Label L1, P1, P2;
    TextField T1,T2;
    TextArea cikti;            

//  dinamik boyutlu degisken sinifi Vector'u kullanarak
//  iki vector listesi yarat
    Vector list1 = new Vector();
    Vector list2 = new Vector();

//  Sonuclari yine vektor cinsinden de§iskenler
//  kullanarak aktar
    Vector ansUn;
    Vector ansInt;

    public void init() {
        P1 = new Label("Birinci listeyi gir : ");
        T1 = new TextField(50);
        P2 = new Label("Ikinci  listeyi gir : ");
        T2 = new TextField(50);

// Sonuclarin yazildigi yazi alanini ac
        cikti = new TextArea(10,40);
        cikti.setEditable(false);
        cikti.setText("");
        add(P1);
        add(T1);
        T1.addActionListener(this);
        add(P2);
        add(T2);
        T2.addActionListener(this);
        add(cikti);
    }

    public void girdiA(String string, Vector list)
    {
        // StringTokeniser sinifi String degiskenleri icin
        // Enumeration sinifinin yaptigina paralel gorev
        // gorur String'i sıraya sokarak degerlerini sırayla verir
        StringTokenizer tokens = new StringTokenizer(string);
        while(tokens.hasMoreTokens()) {
            String test = tokens.nextToken();
            list.addElement(test);
        }
    }

    public void ciktiA(Vector v)
    {
        Enumeration enm = v.elements();
        while(enm.hasMoreElements())
        {
            String ans = (String)enm.nextElement();
            cikti.append(ans + "\n");
        }
    }

    public void actionPerformed(ActionEvent e)
    {
         if(e.getSource()==T1)
         {
            String stringToTokenize = T1.getText();
            girdiA(stringToTokenize,list1);
         }
        else if(e.getSource()==T2)
        {
            String stringToTokenize = T2.getText();
            girdiA(stringToTokenize,list2);
//          Iki listenin bilesim ve kesisim kümelerini hesapla.
            ansUn = set.bilesim(list1,list2);
            ansInt = set.kesisim(list1,list2);
//          sonuclari cikti alanina gonder
            cikti.setText("");
            cikti.append("\nIki listenin bilesim kumesi : \n");
            ciktiA(ansUn);
            cikti.append("\nIki listenin kesisim kumesi : \n");
            ciktiA(ansInt);
        }
    } //actionPerformed metodunun sonu
}
