漢諾塔java代碼圖形化 編程漢諾塔

JAVA漢諾塔

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分-----------------------

java實現(xiàn)漢諾塔的代碼,求注釋,具體到每一行代碼,急求,,,

這樣應(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++;

}

}

求java版漢諾塔的演示程序

源代碼:

/**

*本程序完成的功能是利用漢遞規(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)

綿陽服務(wù)器托管