import javax.swing.*; import java.awt.*; import java.awt.event.*; public class Hanoi extends JPanel implements ActionListener { private JTextField input; private JTextArea output; public Hanoi() { input = new JTextField("0", 8); input.addActionListener(this); output = new JTextArea(32, 22); setLayout(new FlowLayout()); add(input); add(output); } private void hanoi(int n, String a, String b, String c) { if (n > 0) { hanoi(n - 1, a, c, b); output.append("円盤 " + n + "を、" + a + "から" + b + "へ。\n"); hanoi(n - 1, c, b, a); } } public void actionPerformed(ActionEvent e) { int n = Integer.parseInt(input.getText()); hanoi(n, "棒A", "棒B", "棒C"); output.append("以上\n\n"); } public static void main(String[] args) { SwingUtilities.invokeLater(() -> { JFrame frame = new JFrame("ハノイの塔"); frame.add(new Hanoi()); frame.pack(); frame.setVisible(true); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); }); } }