1  import java.util.Arrays;
  2  
  3  /**
  4     A Towers of Hanoi puzzle with three towers.
  5  */
  6  public class TowersOfHanoi
  7  {
  8     private Tower[] towers;
  9  
 10     /**
 11        Constructs a puzzle in which the first tower has a given number of disks.
 12        @param ndisks the number of disks
 13     */
 14     public TowersOfHanoi(int ndisks)
 15     {
 16        towers = new Tower[3];
 17        towers[0] = new Tower(ndisks);
 18        towers[1] = new Tower(0);
 19        towers[2] = new Tower(0);
 20     }
 21  
 22     /**
 23        Moves a pile of disks from one peg to another and displays the movement.
 24        @param disks the number of disks to move
 25        @param from the peg from which to move the disks
 26        @param to the peg to which to move the disks
 27     */
 28     public void move(int disks, int from, int to)
 29     {
 30        if (disks > 0) 
 31        {
 32           int other = 3 - from - to;
 33           move(disks - 1, from, other);      
 34           towers[to].add(towers[from].remove());
 35           System.out.println(Arrays.toString(towers));
 36           move(disks - 1, other, to);
 37        }
 38     }
 39  }
 40