就是把end賦值給temp,temp賦值給end啊,如果寫出來這段代碼還是不容易的,不是進(jìn)入mb_hanoi(2,'S','E','T',)這個方法中繼續(xù)執(zhí)行是進(jìn)入上面的方法,mb_hanoi(2,'S','E','T',)是調(diào)用方法,方法在上面
我們提供的服務(wù)有:成都網(wǎng)站設(shè)計、成都網(wǎng)站制作、微信公眾號開發(fā)、網(wǎng)站優(yōu)化、網(wǎng)站認(rèn)證、興安ssl等。為上1000家企事業(yè)單位解決了網(wǎng)站和推廣的問題。提供周到的售前咨詢和貼心的售后服務(wù),是有科學(xué)管理、有技術(shù)的興安網(wǎng)站制作公司
你順著看就行了
這樣應(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++;
}
}
你把1,2盤看成一個特殊的盤。所以現(xiàn)在n=2,當(dāng)n=2時,需先把1盤移動到B塔中,把1-3步一起看,作用即把特殊盤移動至B。
然后把3盤移動至C塔,即第4步。
最后,把特殊盤移動到C塔上,同樣把5-7步一起看,達(dá)到的效果即把特殊盤移動至C盤,完成!!
等于4的時候 ,其實就是把123盤看成特殊盤!同樣的道理,因為漢諾塔是遞歸實現(xiàn)的,明白之后很簡單。
public?class?Hannoi?{
public?static?void?main(String[]?args)?{
int?nDisks?=?3;
moveDish(nDisks,?'A',?'B',?'C');
}
private?static?void?moveDish(int?level,?char?from,?char?inter,?char?to)?{
if?(level?==?1)?{
System.out.println("從"?+?from?+?"移動盤子?"?+?level?+?"?號到"?+?to);
}?else?{
moveDish(level?-?1,?from,?to,?inter);
System.out.println("從"?+?from?+?"移動盤子?"?+?level?+?"?號到"?+?to);
moveDish(level?-?1,?inter,?from,?to);
}
}
}
class
HanRuoTa
{
static
long
s=0;
public
static
void
main(String
args[])
{
int
n
=3;
System.out.println("漢諾塔層數(shù)為"
+
n);
System.out.println("移動方案為:"
);
hanoi(n,
'a',
'b',
'c');
System.out.println("需要移動次數(shù):"+s);
}
static
void
hanoi(int
n,
char
a,
char
b,
char
c)
{
if
(n
0)
{
hanoi(n
-
1,
a,
c,
b);
move(a,
b);
hanoi(n
-
1,
c,
b,
a);
s++;
}
}
static
void
move(char
x,
char
y)
{
System.out.println(x
+
"-"
+
y
+
"\t");
}
}
運(yùn)行結(jié)果:
漢諾塔層數(shù)為3
移動方案為:
a-b
a-c
b-c
a-b
c-a
c-b
a-b
需要移動次數(shù):7
import java.awt.*;
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ù)賦給當(dāng)前x
this.y=y; //將參數(shù)賦給當(dāng)前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; //當(dāng)前con等于參數(shù)con
con.setLayout(null); //調(diào)用on對象的方法setLayout,并設(shè)置為空
this.盤子=盤子; //當(dāng)前盤子等于參數(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分-----------------------