import java.io.*; class UseIntSets20 { // Set maintenance program with constructive set class // Includes 'undo' command with multiple levels of undo public static void main(String[] args) throws IOException { int n=0; char ch; String line; BufferedReader in = new BufferedReader(new InputStreamReader(System.in)); Stack done = new Stack(), undone = new Stack(); IntSet20 mySet = new IntSet20(); do { System.out.print(": "); line = in.readLine(); ch = line.charAt(0); if(line.length()>1) n = Integer.parseInt(line.substring(1).trim()); switch(ch) { case 'q' : break; case 'd' : done.push(mySet); mySet = mySet.delete(n); undone = new Stack(); break; case 'a' : done.push(mySet); mySet = mySet.add(n); undone = new Stack(); break; case 'm' : if(mySet.member(n)) System.out.println("Is a member"); else System.out.println("Not a member"); break; case 'u': if(done.isEmpty()) System.out.println("Nothing to undo"); else { undone.push(mySet); mySet = (IntSet20) done.top(); done.pop(); } break; case 'r': if(undone.isEmpty()) System.out.println("Nothing to redo"); else { done.push(mySet); mySet = (IntSet20) undone.top(); undone.pop(); } break; case 'p': System.out.println(mySet); break; default: System.out.print("d - delete, a - add, m - member,"); System.out.println("u - undo, r - redo, p - print, q - quit"); break; } } while(ch!='q'); } }