import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class Exercise6_37 extends JApplet implements ActionListener {
int totalNumberOfDisks;
int numberOfDisksToMove;
int singularityPillar = 1;
int doomPillar = 3;
int tempPillar = 2;
int stepsCounter = 0;
JLabel inputLabel;
JTextField inputField;
JTextArea outputArea;
JScrollPane scroller;
public void init() {
Container container = getContentPane();
container.setLayout(new FlowLayout());
inputLabel = new JLabel("输入盘子的总数:");
container.add(inputLabel);
inputField = new JTextField(15);
inputField.addActionListener(this);
container.add(inputField);
outputArea = new JTextArea(18, 15);
scroller = new JScrollPane(outputArea);
container.add(scroller);
}
public void actionPerformed(ActionEvent actionEvent) {
outputArea.setText("");
stepsCounter = 0;
totalNumberOfDisks = Integer.parseInt(inputField.getText());
numberOfDisksToMove = totalNumberOfDisks;
tower(numberOfDisksToMove, singularityPillar, doomPillar, tempPillar);
outputArea.append("\n\n共需要 " + stepsCounter + " 步!");
}
public void tower(int numberOfDisksToMove, int pillarNoDisksAt,
int pillarNoDisksMoveTo, int tempPillar_) {
if (numberOfDisksToMove == 1) {
outputArea.append("第 " + (++stepsCounter) + " 步:" + pillarNoDisksAt
+ " -> " + pillarNoDisksMoveTo + "\n");
} else {
tower(numberOfDisksToMove - 1, pillarNoDisksAt, tempPillar_,
pillarNoDisksMoveTo);
tower(1, pillarNoDisksAt, pillarNoDisksMoveTo, tempPillar);
tower(numberOfDisksToMove - 1, tempPillar_, pillarNoDisksMoveTo,
pillarNoDisksAt);
}
}
}