import java.awt.*;
因為努力和真誠,有更多的客戶和我們聚集在一起,為了共同目標,創(chuàng)新互聯(lián)在工作上密切配合,從創(chuàng)業(yè)型企業(yè)到如今不斷成長,要感謝客戶對我們的高要求,讓我們敢于面對挑戰(zhàn),才有今天的進步與發(fā)展。從網(wǎng)站到小程序定制開發(fā),軟件開發(fā),成都app軟件開發(fā),十年企業(yè)網(wǎng)站建設(shè)服務(wù)經(jīng)驗,為企業(yè)提供網(wǎng)站設(shè)計,網(wǎng)站托管、服務(wù)器托管一條龍服務(wù).為企業(yè)提供全網(wǎng)整合營銷推廣,定制網(wǎng)站建設(shè),原創(chuàng)設(shè)計,十年品質(zhì),值得您的信賴.
public class TowerPoint //公共類TowerPoint
{
int x,y; //定義2個int類型的變量
boolean 有盤子; //定義一個boolean類型的變量
Disk 盤子=null; //初始化一個對象"盤子"并賦值為空
HannoiTower con=null; //初始化一個HannoiTower類的對象"con"并賦值為空
public TowerPoint(int x,int y,boolean boo) //構(gòu)造函數(shù),有3個參數(shù),x,y,boo
{
this.x=x; //將參數(shù)賦給當前x
this.y=y; //將參數(shù)賦給當前y
有盤子=boo; //將boo賦給"有盤子"
}
public boolean 是否有盤子() //定義一個返回boolean類型的方法"是否有盤子"
{
return 有盤子; //返回boolean類型的"有盤子"
}
public void set有盤子(boolean boo) //set方法,并且參數(shù)為boolean
{
有盤子=boo; //將boo賦給有盤子
}
public int getX() //取得x方法
{
return x; //返回x
}
public int getY()//取得y方法
{
return y; //返回y
}
public void 放置盤子(Disk 盤子,HannoiTower con) //定義一個有2個參數(shù)的"放置盤子"方法。參數(shù)是Disk類和HannoiTower類
{
this.con=con; //當前con等于參數(shù)con
con.setLayout(null); //調(diào)用on對象的方法setLayout,并設(shè)置為空
this.盤子=盤子; //當前盤子等于參數(shù)盤子
con.add(盤子); //con對象的add方法,加入"盤子"對象
int w=盤子.getBounds().width; //定義并給一個int類型的w變量一個值,值為"盤子.getBounds().width"
int h=盤子.getBounds().height; //定義并給一個int類型的h變量一個值,值為"盤子.getBounds().height"
盤子.setBounds(x-w/2,y-h/2,w,h);//調(diào)用"盤子"對象的setBounds方法,并把傳遞值
有盤子=true;//boolean類型的對象"有盤子"等于true
con.validate(); //調(diào)用con對象的validate方法
}
public Disk 獲取盤子() //定義"獲取盤子"方法,方法返回Disk對象
{
return 盤子; //返回盤子
}
}
-----------------------另外說一下,樓主太摳門了?。。。。。。?!只給5分-----------------------
這樣應(yīng)該可以了
如果還有那個地方不懂的,建議你研究下漢諾塔算法
import
java.io.BufferedReader;//引入IO包中的BufferedReader
import
java.io.IOException;//引入IO包中的IO異常處理
import
java.io.InputStreamReader;//引入IO包中的InputStreaReader
public
class
Hinoi
{
//主類
static
int
m=0;//定義移動的次數(shù)
//主程序入口--main方法
public
static
void
main(String[]
args)
{
//創(chuàng)建BufferedReader對象,InputStream輸入流
BufferedReader
bf
=
new
BufferedReader(new
InputStreamReader(System.in));
System.out.println("請輸入盤子的個數(shù):");
try
{
int
sl
=
Integer.parseInt(bf.readLine().toString());//接收總盤子個數(shù)
toMove(sl,"A","B","C");//調(diào)用移動方法
A--C
}
catch
(NumberFormatException
e)
{捕獲NumberFormatException異常
//
TODO
Auto-generated
catch
block
e.printStackTrace();//打印異常
}
catch
(IOException
e)
{//捕獲IOException異常
//
TODO
Auto-generated
catch
block
e.printStackTrace();//打印異常
}
System.out.println("總共移動了:"+m+"
次數(shù)");//打印移動次數(shù)
}
//移動方法
private
static
void
toMove(int
sl,
String
one,
String
two,String
three)
{
if(sl==1){//如果只有一個盤子,則直接移動到C柱
System.out.println("盤子"+sl+"
從
"+one+"----"+three);
}else{//如果總盤數(shù)大于1,則遞歸調(diào)用移動方法
//把所有的數(shù)量為sl-1的盤子全部從A移到到B(C作為一個過渡),好提供一個最下面的位置給最大盤子到C;
toMove(sl-1,one,three,two);
System.out.println("盤子"+sl+"
從
"+one+"----"+three);
//把所有的剩余的盤子從B移動到C(A作為一個過渡)
toMove(sl-1,two,one,three);
}
m++;
}
}
源代碼:
/**
*本程序完成的功能是利用漢遞規(guī)算法實現(xiàn)漢諾塔的動態(tài)演示程序
*/
import javax.swing.*;
import java.awt.geom.*;
import java.awt.event.*;
import java.awt.*;
public class Hanio extends JApplet implements ActionListener, Runnable
{
/**
*diskNum是盤子的數(shù)量
*/
private int diskNum ;
/**
*各個組件的句柄
*/
private JButton begin, stop;
private JLabel lDiskNum;
private JTextField text;
JPanel pane;
/**
*定義一個線程句柄
*/
private Thread animate;
/**
*定義a,b,c三個柱子上是否有盤子,有哪些盤子
*/
private int adisk[];
private int bdisk[];
private int cdisk[];
public void init()
{
Container content = getContentPane();
content.setLayout(new BorderLayout());
lDiskNum = new JLabel(盤子的數(shù)目);
text = new JTextField(8);
begin = new JButton(開始);
begin.addActionListener(this);
stop = new JButton(停止);
stop.addActionListener(this);
pane = new JPanel();
pane.setLayout(new FlowLayout());
pane.add(lDiskNum);
pane.add(text);
pane.add(begin);
pane.add(stop);
content.add(pane, BorderLayout.SOUTH);
}
public void paint(Graphics g)
{
Graphics2D g2D = (Graphics2D)g;
Ellipse2D.Double ellipse;
g2D.setPaint(getBackground());
if(adisk != null)
{
/**
*消除以前畫的盤子
*/
for(int j=adisk.length, i=0; --j=0; i++ )
{
ellipse = new Ellipse2D.Double(20+i*5, 180-i*10, 180-i*10, 20);
g2D.fill(ellipse);
ellipse = new Ellipse2D.Double(220+i*5, 180-i*10, 180-i*10, 20);
g2D.fill(ellipse);
ellipse = new Ellipse2D.Double(420+i*5, 180-i*10, 180-i*10, 20);
g2D.fill(ellipse);
}
drawEllipse(g, 20, adisk);//畫A組盤子
drawEllipse(g, 220, bdisk);//畫B組盤子
drawEllipse(g, 420, cdisk);//畫C組盤子
}
pane.repaint();?
}
public void update(Graphics g)
{
paint(g);
}
/**畫出橢圓代表盤子,g是圖形環(huán)境,x是最下面的盤子的橫坐標,
*arr是柱子數(shù)組
*/
public void drawEllipse(Graphics g,int x,int arr[])
{
Graphics2D g2D = (Graphics2D)g;
Ellipse2D.Double ellipse;
g2D.setPaint(Color.gray);
g2D.draw(new Line2D.Double(x+90, 10, x+90, 180));
for(int j=arr.length, i=0; --j=0; i++ )
if(arr[j] != 0)
{
if(i%2 == 0)
g2D.setPaint(Color.blue);
else
g2D.setPaint(Color.red);
ellipse = new Ellipse2D.Double(x+i*5, 180-i*10, 180-i*10, 20);
g2D.fill(ellipse);
}
}
public void actionPerformed(ActionEvent e)
{
String command = e.getActionCommand();
if(command.equals(開始))
{
/**
*進行初始化,開始的時候只有a柱子上有盤子,其他柱子都沒有
*/
diskNum = Integer.parseInt(text.getText());
adisk = new int[diskNum];
for(int i=0; iadisk.length; i++)
adisk[i] = 1;
bdisk = new int[diskNum];
for(int k=0; kbdisk.length; k++)
bdisk[k] = 0;
cdisk = new int[diskNum];
for(int i=0; icdisk.length; i++)
cdisk[i] = 0;
repaint();
if(animate == null || !animate.isAlive())//創(chuàng)建一個線程
{
animate = new Thread(this);
animate.start();
}
}
if(command.equals(停止))
{
for(int k=0; kbdisk.length; k++)
bdisk[k] = 0;
for(int i=0; icdisk.length; i++)
cdisk[i] = 0;
repaint();
text.setText();
animate = null;
}
}
/**
*線程方法,在此調(diào)用漢諾塔執(zhí)行移動盤子操作
*/
public void run()
{
hanio(diskNum, 'A', 'B', 'C');
repaint();
}
/**
*漢諾塔遞規(guī)調(diào)用程序,n是盤子的數(shù)量,A,B,C分別代表三個柱子
*/
public void hanio(int n, char A, char B, char C)
{
if(n 1)
{
hanio(n-1, A, C, B);
pause();//停頓幾秒在執(zhí)行
switch(A)
{
case 'A':adisk[n-1] = 0;break;
case 'B':bdisk[n-1] = 0;break;
case 'C':cdisk[n-1] = 0;break;
default:break;
}
switch(C)
{
case 'A':adisk[n-1] = 1;break;
case 'B':bdisk[n-1] = 1;break;
case 'C':cdisk[n-1] = 1;break;
default:break;
}
repaint();
hanio(n-1, B, A, C);
}
pause();
switch(A)
{
case 'A':adisk[n-1] = 0;break;
case 'B':bdisk[n-1] = 0;break;
case 'C':cdisk[n-1] = 0;break;
default:break;
}
switch(C)
{
case 'A':adisk[n-1] = 1;break;
case 'B':bdisk[n-1] = 1;break;
case 'C':cdisk[n-1] = 1;break;
default:break;
}
repaint();
}
/**
*每隔半妙鐘移動一個盤子
*/
public void pause()
{
try{
Thread.sleep(500);//可以修改此值加快盤子移動的速度
}catch(InterruptedException e){}
}
}
分享題目:漢諾塔java代碼圖形化 編程漢諾塔
瀏覽地址:http://muchs.cn/article18/hjchgp.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供移動網(wǎng)站建設(shè)、網(wǎng)站維護、網(wǎng)站改版、網(wǎng)站營銷、網(wǎng)站設(shè)計、手機網(wǎng)站建設(shè)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)