⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 hanoi.java

📁 一个演示汉诺塔的小程序 虽然不是很大 但也不
💻 JAVA
字号:
package hanoit;

import javax.swing.JOptionPane;
import javax.swing.*;
import java.awt.*;
import java.awt.Graphics;


public class Hanoi extends JFrame
{
        static int n=Integer.parseInt(JOptionPane.showInputDialog("Enter number of disks:"));
        static int time=Integer.parseInt(JOptionPane.showInputDialog("Enter the move frequency of disks:"));
        static int num=0;
        static char[] array=new char[n];
        private static Thread animate;
        
        MyPanel panel =new MyPanel();
        static String string="";
        static JTextArea text=new JTextArea();
        
        
        
        public Hanoi()
        {
                getContentPane ().setLayout (new BorderLayout());
                getContentPane ().add (new JScrollPane(text),BorderLayout.EAST);        
                getContentPane ().add (panel,BorderLayout.CENTER);
                

        }
        
        public static void main (String[] args)
        {
                for(int i=0;i<n;i++)
                {
                        array[i]='A';
                }
                Hanoi hanoi=new Hanoi();
                hanoi.setTitle("HanoiZiJiZuo Tower");
                hanoi.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                hanoi.setSize(1450, 400);
                hanoi.setVisible(true);
                hanoi.moveDisks(n, 'A', 'C', 'B');
        }
        
        public class MyPanel extends JPanel
        {
           


public void paintComponent(Graphics g) 
                {
                super.paintComponent(g);
                        g.setColor(Color.RED);
                        g.drawLine(50,310,1100,310);
                        g.fillRect(200,10,10,300);
                        g.drawString("A", 203, 340);
                        g.fillRect(500,10,10,300);
                        g.drawString("B", 503, 340);
                        g.fillRect(800,10,10,300);
                        g.drawString("C", 803, 340);
                        draw(g);
                        repaint();
                }
                void draw(Graphics g)
                {
                        g.setColor(Color.YELLOW);
                        num=0;
                        for(int  i=n;i>0;i--)
                        {
                                
                                if(array[(int)(i-1.0)]=='A')
                                {
                                        g.fillOval(205-(int)((i-1+1.0)/n*150),290-20*num,2*(int)((i-1+1.0)/n*150),20);

g.setColor(Color.BLACK);
                                        g.drawString(""+i, 203, 304-20*num);
                                        g.setColor(Color.YELLOW);
                                        num++;
                                }
                                
                        }
                        num=0;
                        for(int  i=n;i>0;i--)
                        {
                                
                                if(array[(int)(i-1)]=='B')
                                {
                                        g.fillOval(505-(int)((i-1+1.0)/n*150),290-20*num,2*(int)((i-1+1.0)/n*150),20);
                                        g.setColor(Color.BLACK);
                                        g.drawString(""+i, 503, 304-20*num);
                                        g.setColor(Color.YELLOW);
                                        num++;
                                }
                                
                        }
                        num=0;

for(int  i=n;i>0;i--)
                        {
                                
                                if(array[(int)(i-1)]=='C')
                                {
                                        g.fillOval(805-(int)((i-1+1.0)/n*150),290-20*num,2*(int)((i-1+1.0)/n*150),20);
                                        g.setColor(Color.BLACK);
                                        g.drawString(""+i, 803, 304-20*num);
                                        g.setColor(Color.YELLOW);
                                        num++;
                                }
                                
                        }
                        
                        
                        
                        g.setColor(Color.BLACK);
                }
                
                
        }
        public  void moveDisks(int a, char fromTower,char toTower, char auxTower)
        {
                
                        
                
                if (a == 1) // Stopping condition

     {
                        System.out.println("Move disk " + a + " from " +fromTower + " to " + toTower);
                        string+="Move disk " + a + " from " +fromTower + " to " + toTower+"         .\n";
                        text.setText(string);
                        array[a-1]=toTower;
                        pause();
                }
                else
                {
                        moveDisks(a - 1, fromTower, auxTower, toTower);
                        System.out.println("Move disk " + a + " from " +fromTower + " to " + toTower);
                        string+="Move disk " + a + " from " +fromTower + " to " + toTower+ "         .\n";
                        text.setText(string);  
                        array[a-1]=toTower;
                        pause();
                        moveDisks(a - 1, auxTower, toTower, fromTower);

                }
        
        }
                
        public static void pause()
        {
                try
                {
                        Thread.sleep(time*100);//可以修改此值加快盘子移动的速度
                }
                catch(InterruptedException e)
                {
                }
        }
        
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -