申明:以下代码由Qdieyou斑竹原创,未经准许,不得转载 本代码使用递归实现,程序的注释写得相当清楚了,所以这里就不多说明了。
import java.awt.*; // Container, FlowLayout import java.awt.event.*; import javax.swing.*;
public class HanoiTower extends JApplet implements ActionListener{
JTextField field; //用于获取盘数 JLabel label = new JLabel("请输入盘数"); JButton button; public static String output;//用于保存移动的步骤
JTextArea outputArea = new JTextArea(17,20);//用于输出
public void init(){ setLayout( new FlowLayout() ); add(label); field = new JTextField(10); add(field); button = new JButton("开始移动"); button.addActionListener( this ); add(button); }
public void actionPerformed( ActionEvent actionEvent ){ output = " "; int n;//盘数 int steps;//steps n = Integer.parseInt(field.getText()); steps=tower(n,'A','B','C'); output = output + "移动完毕,共移动 "+steps+" 步\n"; outputArea.setText(output); JScrollPane scroller = new JScrollPane(outputArea); JOptionPane.showMessageDialog(null,scroller,"result",JOptionPane.INFORMATION_MESSAGE);
}
public static int tower(int n, char one, char two, char three) {//n 盘子的个数; one,two,three 柱子 int step=0; //移动的次数 if (n==1) { output = output + one + "->" + three + "\n "; step++; } else { step+=tower(n-1,one,three,two); output = output + one+"->"+three+"\n "; step++; step+=tower(n-1,two,one,three); } return(step); } }
| 上网速度更快更爽、更安全下载使用Firefox火狐浏览器
|
|
|