?? chapter18n3.java
字號:
/** * a recursive solution to the Towers of Hanoi */import java.lancs.* ;class PegException extends Exception { public PegException() {} }class Peg { private static final int MAX_NO_DISKS = 100 ; private String name ; private int[] disks = new int[MAX_NO_DISKS] ; private int noDisks ; public Peg(String n) { name = n ; noDisks = 0 ; } // end of constructor method public String toString() { return name ; } // end of method toString public int remove() throws PegException { if (noDisks == 0) throw new PegException() ; int temp = disks[noDisks - 1] ; noDisks-- ; return temp ; } // end of method remove public void add(int d) { disks[noDisks] = d ; noDisks++ ; } // end of method add } // end of class Pegpublic class Chapter18n3 { static int noMoves ; public static void main(String[] args) throws Exception { Peg pegA = new Peg("A"), pegB = new Peg("B"), pegC = new Peg("C") ; BasicIo.prompt("number of disks? ") ; int n = BasicIo.readInteger() ; for (int i = 0 ; i < n ; i++) pegA.add(n - i) ; noMoves = 0 ; hanoi(n, pegA, pegB, pegC) ; System.out.println("\nno of moves for " + n + " disks is " + noMoves) ; } // end of main method public static void moveDisk(Peg fromPeg, Peg toPeg) { try { int d = fromPeg.remove() ; toPeg.add(d) ; System.out.println("Move disk " + d + " from " + fromPeg + " to " + toPeg) ; noMoves++ ; } catch(PegException e) { System.out.println("major peg problem") ; System.exit(1) ; } } // end of method moveDisk public static void hanoi(int n, Peg fromPeg, Peg toPeg, Peg helpPeg) { if (n == 1) moveDisk(fromPeg, toPeg) ; else { hanoi(n - 1, fromPeg, helpPeg, toPeg) ; moveDisk(fromPeg, toPeg) ; hanoi(n - 1, helpPeg, toPeg, fromPeg) ; } } // end of method hanoi } // end of class Chapter18n3
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -