package Question3_4; import java.util.Stack; public class Tower { private Stack disks; private int index; public Tower(int i) { disks = new Stack(); index = i; } public int index() { return index; } public void add(int d) { if (!disks.isEmpty() && disks.peek() <= d) { System.out.println("Error placing disk " + d); } else { disks.push(d); } } public void moveTopTo(Tower t) { int top = disks.pop(); t.add(top); } public void print() { System.out.println("Contents of Tower " + index() + ": " + disks.toString()); } public void moveDisks(int n, Tower destination, Tower buffer){ if (n > 0) { String tag = "move_" + n + "_disks_from_" + this.index + "_to_" + destination.index + "_with_buffer_" + buffer.index; System.out.println("<" + tag + ">"); moveDisks(n - 1, buffer, destination); System.out.println(""); System.out.println(""); System.out.println(""); this.print(); System.out.println(""); System.out.println(""); destination.print(); System.out.println(""); System.out.println(""); moveTopTo(destination); System.out.println(""); System.out.println(""); this.print(); System.out.println(""); System.out.println(""); destination.print(); System.out.println(""); System.out.println(""); System.out.println(""); buffer.moveDisks(n - 1, destination, this); System.out.println(""); } } }