// SetOfIntegers
// P. Conrad Dec 22 2005 for CISC474 Spring 2006
// Demonstrates 
//        use of import
//        use of ArrayList
//        autoboxing in Java 5.0
//        new improved for loop in Java 5.0
//        the <ObjectType> construct to limit type of ArrayList

import java.util.ArrayList;

public class SetOfIntegers
{

    private ArrayList<Integer> members;

    public void add(int x)
    {
	
	if (!members.contains(x))
	    {
		members.add(x);
	    }
    }

    public void remove(int x)
    {
	
	if (members.contains(x))
	    {
		// note: members.remove(x); doesn't work.
		// WHY?  Clues: consider how autoboxing works in Java 5.0
		// Take a look at the ArrayList API in Java 5.0
		members.remove(new Integer(x));
	    }
    }

    public boolean contains(int x)
    {
	return members.contains(x);
    }

    public void print()
    {
	int count = 0;
	System.out.print("{");
	for (int cell: members)
	    {
		if (count!=0)
		    System.out.print(",");
		System.out.print(cell);
		count++;
	    }
	System.out.print("}");
    }


    public SetOfIntegers () {
	members = new ArrayList<Integer>();
    }


    public static void main(String args[])
    {
	SetOfIntegers foo = new SetOfIntegers();

	foo.add(3);
	foo.add(4);
	foo.add(3);
	foo.add(2);
	foo.add(3);
	foo.print();	System.out.println("");
	foo.remove(3);
	foo.print();	System.out.println("");
	foo.add(7);
	foo.add(8);
	foo.add(1);
	foo.add(3);
	foo.print();	System.out.println("");
	foo.remove(8);
	foo.print();	System.out.println("");
	foo.remove(4);
	foo.remove(7);
	foo.remove(2);
	foo.remove(1);
	foo.remove(999);
	foo.print();	System.out.println("");
	foo.remove(3);
	foo.print();	System.out.println("");
    }
}
