//ハノイの塔 import java.awt.*; import java.awt.event.*; import java.applet.*; public class cHanoi extends Applet { private boolean isStandalone = false; int m_num; String str; boolean m_vs=false; private TextField textField1 = new TextField(); private Label label1 = new Label(); private TextArea textArea1 = new TextArea(); private Button button1 = new Button(); private Checkbox checkbox1 = new Checkbox(); //アプレットの初期化 public void init() { try { jbInit(); } catch(Exception e) { e.printStackTrace(); } } //コンポーネントの初期化 private void jbInit() throws Exception { textField1.setText("3"); textField1.setBounds(new Rectangle(157, 25, 72, 21)); this.setLayout(null); label1.setText("枚数"); label1.setBounds(new Rectangle(55, 16, 51, 22)); textArea1.setText("textArea1"); textArea1.setBounds(new Rectangle(22, 64, 272, 172)); button1.setLabel("実行"); button1.setBounds(new Rectangle(58, 248, 61, 24)); button1.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(ActionEvent e) { button1_actionPerformed(e); } }); checkbox1.setLabel("詳細"); checkbox1.setBounds(new Rectangle(183, 250, 48, 22)); this.add(textField1, null); this.add(label1, null); this.add(textArea1, null); this.add(button1, null); this.add(checkbox1, null); } //「実行」ボタンを押すと実行します void button1_actionPerformed(ActionEvent e) { //枚数を読み込む m_num=Integer.parseInt(textField1.getText()); m_vs=checkbox1.getState(); str=""; Hanoi(m_num,'A','B','C'); textArea1.setText(str); } void Hanoi(int Num,char A,char B,char C) { if (Num > 0){ if(m_vs){ space(Num); str += "(Hanoi Num:"+(Num-1)+" from:"+A+" to:"+C +")\n"; }; Hanoi(Num-1,A,C,B); space(Num); str += "move "+Num+" th disk from " + A+ " to "+ B+"\n"; if(m_vs){ space(Num); str += "(Hanoi Num:"+(Num-1)+" from:"+C+" to:"+B +" via "+A+")\n"; }; Hanoi(Num-1,C,B,A); } } //枚数に応じて空白を表示する void space(int Num) { for(int i=0;i<(m_num-Num);i++) str +=" "; } }