//------------ // Introduction to Programming Using Java: An Object-Oriented Approach //Arnow/Weiss //------------ import java.util.*; class TowersOfHanoiThread extends Thread { public TowersOfHanoiThread(TowerDisplay td, int nDisks) { this.td = td; this.nDisks = nDisks; td.setup(nDisks,1); } public void run() { amRunning = true; amStopped = false; solveIt(nDisks, 1, 3); } public void ourSuspend() { amRunning = false;} public void ourResume() { amRunning = true;} public void ourStop() { amStopped = true;} private void delay(int n) { try { Thread.sleep(n); } catch(Exception e) {} } private void solveIt(int nDisks, int source, int target) { if (nDisks<=0) return; int holdingTower = getholdingTower(source,target); solveIt(nDisks-1,source,holdingTower); if (amStopped) return; while (!amRunning) delay(80); td.displayMove(source,target); solveIt(nDisks-1,holdingTower,target); } private int getholdingTower(int source, int target) { if (source==2 && target==3 || source==3 && target==2) return 1; if (source==1 && target==3 || source==3 && target==1) return 2; return 3; } private boolean amRunning, amStopped; private int nDisks; private TowerDisplay td; }