/Users/petercappello/NetBeansProjects/56-2014/56-2014-lab2/src/IntegerSet.java
  1 /**
  2  *
  3  * @author Peter Cappello
  4  */
  5 public class IntegerSet 
  6 {
  7     private static final int MAX_SET_SIZE = 101; // U = [0, 100]
  8     
  9     private final boolean[] booleanArray = new boolean[ MAX_SET_SIZE ];
 10     
 11     /**
 12      * Which of the 2 implementations is better?
 13      * (the commented out one & the implementation that is live code)
 14      * Define your concept of better (e.g., faster).
 15      */
 16     public static IntegerSet union( IntegerSet set1, IntegerSet set2 )
 17     {
 18 //        IntegerSet union = new IntegerSet();
 19 //        for ( int i = 0; i < MAX_SET_SIZE; i++ )
 20 //        {
 21 //            union.booleanArray[ i ] = set1.booleanArray[ i ] || set2.booleanArray[ i ];
 22 //        }
 23         IntegerSet union = new IntegerSet();
 24         System.arraycopy( set1.booleanArray, 0, union.booleanArray, 0, MAX_SET_SIZE );
 25         for ( int i = 0; i < MAX_SET_SIZE; i++ )
 26         {
 27             if ( set2.booleanArray[ i ] )
 28             {
 29                 union.booleanArray[ i ] = true;
 30             }
 31         }
 32         return union;
 33     }
 34     
 35     public static IntegerSet intersection( IntegerSet set1, IntegerSet set2 )
 36     {
 37         IntegerSet intersection = new IntegerSet();
 38         for ( int i = 0; i < MAX_SET_SIZE; i++ )
 39         {
 40             intersection.booleanArray[ i ] = set1.booleanArray[ i ] && set2.booleanArray[ i ];
 41         }
 42         return intersection;
 43     }
 44     
 45     public void insertElement( int element ) { booleanArray[ element ] = true; }
 46     
 47     public void deleteElement( int element ) { booleanArray[ element ] = false; }
 48     
 49     @Override
 50     public String toString()
 51     {
 52         boolean isEmpty = true;
 53         StringBuilder string = new StringBuilder();
 54         string.append( "{ " );
 55         for ( int i = 0; i < MAX_SET_SIZE; i++ )
 56         {
 57             if ( booleanArray[ i ] )
 58             {
 59                 isEmpty = false;
 60                 string.append( i ).append( ' ' );
 61             }
 62         }
 63         return isEmpty ? "---" : string.append( '}').toString();
 64     }
 65     
 66     public boolean isEqual( IntegerSet set )
 67     {
 68         for ( int i = 0; i < MAX_SET_SIZE; i++ )
 69         {
 70             if ( booleanArray[ i ] != set.booleanArray[ i ] )
 71             {
 72                 return false;
 73             }
 74         }
 75         return true;
 76     }
 77     
 78     /**
 79      * Normally, putting unit tests in the class's main method is not considered 
 80      * to be an approach that scales to large or long-lived software projects.
 81      * For this laboratory assignment, it however suffices.
 82      * @param args - not used.
 83      */
 84     public static void main( String[] args )
 85     {
 86         IntegerSet integerSet1 = new IntegerSet();
 87         System.out.println("intergerSet1 is empty: " + integerSet1 );
 88         IntegerSet integerSet2 = new IntegerSet();
 89         System.out.println("empty set union empty set is empty set:  " + union( integerSet1, integerSet2 ) );
 90         IntegerSet universe = new IntegerSet();
 91         for ( int i = 0; i <  MAX_SET_SIZE; i++  )
 92         {
 93             universe.booleanArray[ i ] = true;
 94         }
 95         System.out.println( "universe: " + universe );
 96         System.out.println("empty set union universe = universe:  " + union( integerSet1, universe ) );
 97         System.out.println("empty set intersection universe = empty set:  " + intersection( integerSet1, universe ) );
 98         integerSet1.insertElement( 0 );
 99         System.out.println("intergerSet1 has only element 0: " + integerSet1 );
100         System.out.println("intergerSet1 != integerSet2: isEqual: " + integerSet1.isEqual( integerSet2 ) );
101         System.out.println("intergerSet2 != integerSet1: isEqual: " + integerSet2.isEqual( integerSet1 ) );
102         integerSet2.insertElement( 0 );
103         System.out.println("intergerSet1 == integerSet2: isEqual: " + integerSet1.isEqual( integerSet2 ) );
104         integerSet1.deleteElement( 0 );
105         System.out.println("intergerSet1 is empty: " + integerSet1 );
106     }
107 }
108