1  import java.util.ArrayList;
  2  
  3  /**
  4     A tower containing disks in the Towers of Hanoi puzzle.
  5  */
  6  public class Tower
  7  {
  8     private ArrayList<Integer> disks;
  9  
 10     /**
 11        Constructs a tower holding a given number of disks of decreasing size.
 12        @param ndisks the number of disks
 13     */
 14     public Tower(int ndisks)
 15     {
 16        disks = new ArrayList<Integer>();
 17        for (int d = ndisks; d >= 1; d--) { disks.add(d); }
 18     }
 19  
 20     /**
 21        Removes the top disk from this tower.
 22        @return the size of the removed disk
 23     */
 24     public int remove()
 25     {      
 26        return disks.remove(disks.size() - 1);
 27     }
 28  
 29     /**
 30        Adds a disk to this tower.
 31        @param size the size of the disk to add
 32     */
 33     public void add(int size)
 34     {
 35        if (disks.size() > 0 && disks.get(disks.size() - 1) < size)
 36        {
 37           throw new IllegalStateException("Disk is too large");
 38        }
 39        disks.add(size);
 40     }
 41  
 42     public String toString() { return disks.toString(); }   
 43  }
 44