2023年全國(guó)碩士研究生考試考研英語(yǔ)一試題真題(含答案詳解+作文范文)_第1頁(yè)
已閱讀1頁(yè),還剩24頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、<p>  JAVA程序設(shè)計(jì) 課程設(shè)計(jì)報(bào)告</p><p>  課 題: 騎士游歷程序的開(kāi)發(fā) </p><p>  姓 名: </p><p>  學(xué) 號(hào): </p><p>  同組姓名:

2、 </p><p>  專業(yè)班級(jí): </p><p>  指導(dǎo)教師: </p><p>  設(shè)計(jì)時(shí)間: 2013.06.10 </p><p><b>  目 錄</b></p><p>  一

3、 系統(tǒng)描述2</p><p>  二  設(shè)計(jì)目的與意義2</p><p>  三 分析與設(shè)計(jì)3</p><p>  3.1 創(chuàng)建騎士游歷程序3</p><p>  3.2 功能模塊劃分3</p><p>  3.3 系統(tǒng)詳細(xì)設(shè)計(jì)文檔5</p><p>  

4、3.3.1 類的劃分及相互關(guān)系5</p><p>  3.3.2 系統(tǒng)或模塊的流程圖5</p><p>  3.4 各個(gè)模塊的實(shí)現(xiàn)方法描述6</p><p>  3.4.1 AccessibleSquare算法實(shí)現(xiàn)6</p><p>  3.4.2 圖形化界面9</p><p>  3.4.3

5、主調(diào)用程序的設(shè)計(jì)和開(kāi)發(fā)10</p><p>  3.5 測(cè)試數(shù)據(jù)及期望結(jié)果11</p><p>  四 系統(tǒng)測(cè)試11</p><p>  五 總結(jié)或心得體會(huì)15</p><p>  六 參考文獻(xiàn)16</p><p><b>  七 附錄16</b></p>&

6、lt;p><b>  一 系統(tǒng)描述</b></p><p>  騎士游歷問(wèn)題是一個(gè)古老而著名的問(wèn)題,它最初是由大數(shù)學(xué)家Euler提出的.</p><p>  問(wèn)題是這樣的:國(guó)際象棋中的棋子(叫作騎士)在一個(gè)空棋盤內(nèi)移動(dòng),問(wèn)它能否經(jīng)過(guò)64格中的每一格且只經(jīng)過(guò)一次?(騎士按L行移動(dòng),即在某方向前進(jìn)兩格接著在與原方向垂直的方向上前進(jìn)一格) </p>

7、<p>  即:有一個(gè)n*m的棋盤(2≤n≤50,2≤m≤50),在棋盤(x1,y1)點(diǎn)即第x1行第y1列有一個(gè)中國(guó)象棋馬,馬走的規(guī)則為:</p><p><b> ?。?)馬走日字;</b></p><p><b> ?。?)馬只能向右走</b></p><p>  任務(wù):求出從起始點(diǎn)到棋盤最右邊的所有路徑。&

8、lt;/p><p>  本程序?qū)崿F(xiàn)了騎士游歷問(wèn)題的求解,并能夠演示起始位置在棋盤上任何位置的游歷問(wèn)題的實(shí)現(xiàn).程序采用動(dòng)態(tài)的圖形演示,使算法的描述更形象,更生動(dòng),使教學(xué)能產(chǎn)生良好的效果。</p><p>  本程序采用Applet來(lái)編制整個(gè)程序,這樣既可以使大家對(duì)算法的實(shí)現(xiàn)有了一定的了解,也可以熟悉一下Java圖形界面, Applet以及Java語(yǔ)言的命名規(guī)范,讓大家熟悉Java的基本語(yǔ)言結(jié)構(gòu)和

9、強(qiáng)大的開(kāi)發(fā)能力。</p><p>  在騎士游歷的課程設(shè)計(jì)中,嚴(yán)格按照面向?qū)ο蟮乃枷脒M(jìn)行開(kāi)發(fā),其中有AccessibleSquare 類,MyPanel類和KnightsTour類.我們應(yīng)注意各個(gè)類之間的關(guān)系,以便更深入地理解Java中類的思想。</p><p>  二  設(shè)計(jì)目的與意義</p><p>  Java課程設(shè)計(jì)是計(jì)算機(jī)科學(xué)與技術(shù)專業(yè)學(xué)生必做的

10、集中實(shí)踐性環(huán)節(jié)之一,是學(xué)習(xí)完《Java程序設(shè)計(jì)》課程后進(jìn)行的一次全面的綜合練習(xí)。其目的在于通過(guò)課程設(shè)計(jì),使學(xué)生能夠得到較系統(tǒng)的技能訓(xùn)練,從而鞏固和加深對(duì)Java 編程的基礎(chǔ)理論知識(shí)的理解,培養(yǎng)學(xué)生綜合運(yùn)用所學(xué)理論解決實(shí)際問(wèn)題的能力,使學(xué)生成為具有扎實(shí)的計(jì)算機(jī)理論基礎(chǔ)和較強(qiáng)的獨(dú)立動(dòng)手能力的復(fù)合型、應(yīng)用型人才。</p><p><b>  三 分析與設(shè)計(jì)</b></p><

11、;p>  解決本程序的問(wèn)題的關(guān)鍵在于如何讓騎士按日字行走,如何計(jì)算騎士從開(kāi)始位置到結(jié)束位置所走的步數(shù)以及如何保證所得的步數(shù)為騎士從開(kāi)始位置到結(jié)束位置所需要的最小的步數(shù),并且可以輸入多組數(shù)據(jù)測(cè)試多組最小的步數(shù)。</p><p>  騎士行走路徑為“L”型,即下圖所示:</p><p>  圖3.1 馬走的規(guī)則</p><p>  當(dāng)n,m 給出之后,同時(shí)給出馬起

12、始的位置和終點(diǎn)的位置,試找出從起點(diǎn)到終點(diǎn)的所有路徑的數(shù)目。例如:(n=10,m=10),(1,5)(起點(diǎn)),(3,5)(終點(diǎn))。應(yīng)輸出2(即由(1,5)到(3,5)共有2條路徑,如下圖):</p><p>  圖3.2 馬走的所有路徑</p><p>  如此,騎士每走一步都按照此方式步進(jìn),直至整個(gè)棋盤都被“游走”一遍則完成。</p><p>  3.1 創(chuàng)建騎

13、士游歷程序</p><p>  在對(duì)eclipse的基本常識(shí)有了初步的了解后,就可以起步創(chuàng)建騎士游歷程序了。</p><p><b>  創(chuàng)建過(guò)程如下:</b></p><p> ?。?)單擊桌面圖標(biāo),啟動(dòng)eclipse開(kāi)發(fā)平臺(tái)進(jìn)入一個(gè)新的工程界面。</p><p> ?。?)命名新的工程并保存文件,方法是單擊菜單Fil

14、eNew Project,出現(xiàn)一個(gè)對(duì)話框窗口,將工程名為Knighttour,選擇保存工程文件目錄之后,單擊Finish按鈕完成騎士游歷工程的創(chuàng)建。</p><p>  3.2 功能模塊劃分</p><p>  整個(gè)程序界面由三部分組成,上方有兩個(gè)工具欄,一個(gè)是,一個(gè)是小程序應(yīng)用,其中可以執(zhí)行還原(R)、移動(dòng)(M)、大小(S)、最大化(N)、最小化(X)、關(guān)閉(C)的操作,小程序應(yīng)用則

15、可執(zhí)行重新啟動(dòng)、重新加載、停止、保存、啟動(dòng)、克隆、標(biāo)記、信息、編輯、字符編碼、打印、屬性、關(guān)閉、退出的相應(yīng)操作。中間是騎士游歷的效果顯示圖,動(dòng)態(tài)演示騎士游歷的過(guò)程;最下邊一排是NextTour和NextMoving兩個(gè)按鈕,單擊NextTour按鈕可以重新開(kāi)始一個(gè)新的游歷,單擊NextMoving按鈕,則顯示騎士要走的下一步。如圖 2.1.1所示(這是騎士在第一個(gè)格子起始位置進(jìn)行游歷的情況,如果想在其他的位置開(kāi)始游歷,直接單擊NextT

16、our按鈕就可以了,程序?qū)崿F(xiàn)的騎士的起始位置的方式是按照從第一列第一個(gè)開(kāi)始、直到最后一列、最后一行)。</p><p>  另外,可以由邊框的顏色的不同,判斷騎士的初始位置、上一步所走的位置和現(xiàn)在所處的位置。單擊NextMoving按鈕可以顯示騎士游歷的下一個(gè)位置。連續(xù)單擊直到64個(gè)格子全部都走完,可以清晰的顯示整個(gè)游歷的過(guò)程。圖3.2.1和3.2.2顯示的是騎士游歷起始位置在第一個(gè)格子和游歷到中間位置的一個(gè)中間

17、狀態(tài)。當(dāng)然,騎士可以在棋盤的任何位置開(kāi)始。</p><p>  圖3.2.1 騎士在第一個(gè)格子的情況</p><p>  圖3.2.2 騎士在第一個(gè)格子的游歷的中間狀態(tài)</p><p><b>  系統(tǒng)詳細(xì)設(shè)計(jì)文檔</b></p><p>  3.3.1 類的劃分及相互關(guān)系</p><p>  

18、本程序由三個(gè)類組成一個(gè)工程文件。其中KinghtsTour 是主類,或者說(shuō)是控制類,AccessibleSquare類主要是算法的實(shí)現(xiàn),MyPanel類實(shí)現(xiàn)圖形化顯示結(jié)果。程序的運(yùn)行關(guān)系圖如圖3.3.1所示。</p><p><b>  系統(tǒng)或模塊的流程圖</b></p><p><b>  系統(tǒng)流程圖:</b></p><p

19、>  圖3.3.2 系統(tǒng)流程圖</p><p>  各個(gè)模塊的實(shí)現(xiàn)方法描述</p><p>  此程序主要分為三個(gè)部分:第一部分主要講解算法編程目的,讓大家熟悉Java的計(jì)算功能;第二部分是圖形化界面,主要講解Appelt的圖形化的界面以及如何利用圖形用戶界面的控件接受用戶信息,并用圖形或圖像顯示結(jié)果;第三部分是控制類通過(guò)響應(yīng)Button時(shí)間完成對(duì)算法類畫(huà)圖類的調(diào)用。</p&

20、gt;<p>  AccessibleSquare算法實(shí)現(xiàn)</p><p>  AccessibleSquare類主要是算法實(shí)現(xiàn),采用啟發(fā)式算法.</p><p> ?。?)先把8個(gè)可能走的方向用兩個(gè)數(shù)組(horizontal[ ]和vertical[ ])表示出來(lái),選擇走哪個(gè)方向就在原坐標(biāo)上進(jìn)行相應(yīng)的加法,表示騎士到了一個(gè)新的位置. horizontal[ ]和vertic

21、al[ ]表示騎士8個(gè)方向走L形狀所需的X坐標(biāo)和Y坐標(biāo)的變化量: horizontal[] = {2,1,-1,-2,-2,-1,1,2}, vertical [] = {-1,-2,-2,-1,1,2,2,1}. 坐標(biāo)圖如下:</p><p>  圖3.4.1 騎士游歷走向坐標(biāo)圖</p><p> ?。?)由于程序采用啟發(fā)式算法,應(yīng)考察每一方格的可到達(dá)性.使用數(shù)組accessi

22、bility []表示可達(dá)到數(shù),并當(dāng)騎士游歷時(shí),程序動(dòng)態(tài)修正剩余格子的可達(dá)到數(shù). accessibility [ arrayPos ] = 0 表明格子已經(jīng)被占據(jù).</p><p> ?。?)使用冒泡法來(lái)查詢最小數(shù). 冒泡排序的基本概念是:依次比較相鄰的兩個(gè)數(shù),將大數(shù)放在前面,小數(shù)放在后面。即首先比較第1個(gè)和第2個(gè)數(shù),將大數(shù)放前,小數(shù)放后。然后比較第2個(gè)數(shù)和第3個(gè)數(shù),將大數(shù)放前,小數(shù)放后,如此繼續(xù),直至比較最后兩

23、個(gè)數(shù),將大數(shù)放前,小數(shù)放后,此時(shí)第一趟結(jié)束,在最后的數(shù)必是所有數(shù)中的最小數(shù)。重復(fù)以上過(guò)程,仍從第一對(duì)數(shù)開(kāi)始比較(因?yàn)榭赡苡捎诘?個(gè)數(shù)和第3個(gè)數(shù)的交換,使得第1個(gè)數(shù)不再大于第2個(gè)數(shù)),將大數(shù)放前,小數(shù)放后,一直比較到最小數(shù)前的一對(duì)相鄰數(shù),將大數(shù)放前,小數(shù)放后,第二趟結(jié)束,在倒數(shù)第二個(gè)數(shù)中得到一個(gè)新的最小數(shù)。如此下去,直至最終完成排序。由于在排序過(guò)程中總是大數(shù)往前放,小數(shù)往后放,相當(dāng)于氣泡往上升,所以稱作冒泡排序。</p>&

24、lt;p>  class AccessibleSquares {</p><p>  //騎士8個(gè)方向走L形狀所需的X坐標(biāo)和Y坐標(biāo)的變化量</p><p>  private static int horizontal[] = {2,1,-1,-2,-2,-1,1,2};</p><p>  private static int vertical [] =

25、{-1,-2,-2,-1,1,2,2,1};</p><p>  private int xpos[] ;//騎士所處X軸的坐標(biāo)</p><p>  private int ypos[] ;//騎士所處y軸的坐標(biāo)</p><p>  private int accessibility [];//表示可達(dá)到數(shù)</p><p>  private

26、 int ownxpos ,ownypos ;</p><p>  private int ownAccessibility ;</p><p>  private int arrayPos ;</p><p>  private int countAccessibility;</p><p>  public AccessibleSquar

27、es(int x , int y ){//構(gòu)造函數(shù)</p><p>  int testXPos; int testYPos;</p><p>  xpos = new int [ 8 ];//騎士所處X軸的坐標(biāo)</p><p>  ypos = new int [ 8 ];</p><p>  accessibility = new

28、 int [ 8 ];</p><p>  arrayPos = 0 ;</p><p>  ownxpos = x ; ownypos = y ;</p><p>  ownAccessibility = KnightsTour.access[ x ][ y ];</p><p>  for (int i = 0 ; i < h

29、orizontal.length ; i++ ){//有八種到達(dá)的情況</p><p>  testXPos = x + horizontal[ i ];//得出X,Y坐標(biāo)的測(cè)試位置</p><p>  testYPos = y + vertical [ i ];</p><p>  if ( (testXPos >= 0 ) & ( testXPo

30、s < 8 ) &</p><p>  (testYPos >= 0 ) & ( testYPos < 8 ) ) {//判斷測(cè)試位置是否在棋盤內(nèi)</p><p>  xpos [ arrayPos ] = testXPos ;//由測(cè)試位置給出正確X,Y坐標(biāo)</p><p>  ypos [ arrayPos ] = testYP

31、os ;</p><p>  accessibility [ arrayPos ] = KnightsTour.access [testXPos][testYPos];</p><p>  //利用對(duì)應(yīng)的X,Y坐標(biāo)得出相應(yīng)的可到達(dá)的路徑總數(shù)</p><p>  // accessibility [ arrayPos ] = 0 表明格子已經(jīng)被占據(jù)</p>

32、<p>  if (accessibility [ arrayPos ] > 0 ) arrayPos ++ ;</p><p>  }//尋找空格子結(jié)束</p><p>  }// 結(jié)束for循環(huán),尋找結(jié)束</p><p>  countAccessibility = arrayPos ;//統(tǒng)計(jì)可達(dá)到數(shù)</p><p

33、>  if (countAccessibility > 0 ) {sortAll();}</p><p>  arrayPos = -1 ;</p><p><b>  }</b></p><p>  public boolean hasMoreAccessible(){</p><p>  // arr

34、ayPos + 1 指向下一個(gè)可行的</p><p>  if ( (arrayPos + 1 ) < countAccessibility ){</p><p>  return true; }</p><p>  else { return false; }</p><p>  }// hasMoreAccessible()方法結(jié)束

35、</p><p>  public AccessibleSquares nextAccessible(){</p><p>  arrayPos ++ ;</p><p>  return this;</p><p><b>  }</b></p><p>  public AccessibleS

36、quares accessibleAt( int pos){</p><p>  if ((pos >= 0) & (pos < countAccessibility ))</p><p>  arrayPos = pos ;</p><p>  return this;</p><p><b>  }</

37、b></p><p>  public int getXpos(){</p><p>  return xpos[ arrayPos ]; }</p><p>  public int getYpos(){</p><p>  return ypos[ arrayPos ]; }</p>&

38、lt;p>  public int getAccessibility(){</p><p>  return accessibility[ arrayPos ]; }</p><p>  public int getTotalAccessible(){</p><p>  return countAccessibility; }</p&g

39、t;<p>  //bubble sorting冒泡排序法.冒泡排序的基本概念是:依次比較相鄰的兩個(gè)數(shù),將大數(shù)放在前面,小數(shù)放在后面。</p><p>  private void sortAll (){</p><p>  for ( int begin = 0 ; begin < countAccessibility - 1 ; begin ++ ){</p&

40、gt;<p>  for ( int i = begin + 1; i < countAccessibility ; i ++ ){</p><p>  if ( accessibility [ begin ] > accessibility [ i ] ){</p><p>  swapAll( begin, i ); }//end of if</p&g

41、t;<p>  }// end of inner for</p><p>  }// end of outer for</p><p>  }// end of sortAll</p><p><b>  //交換兩個(gè)數(shù)</b></p><p>  private void swapAll ( int i

42、, int j ){</p><p>  int temp ;</p><p>  temp = xpos [ i ]; xpos [ i ] = xpos [ j ]; xpos [ j ] = temp;</p><p>  temp = ypos [ i ]; ypos [ i ] = ypos [ j ]; ypos [ j ] = tem

43、p;</p><p>  temp = accessibility [ i ];</p><p>  accessibility [ i ] = accessibility [ j ]; accessibility [ j ] = temp;</p><p><b>  }</b></p><p><b>

44、  //進(jìn)行移動(dòng)操作</b></p><p>  public void domoving(){</p><p>  for ( int i = 0 ; i < countAccessibility ; i ++ ){</p><p>  KnightsTour.access[ xpos [i] ][ ypos[i] ] -- ; }</

45、p><p><b>  //直到?jīng)]有路徑了</b></p><p>  KnightsTour.access[ ownxpos ][ ownypos ] = 0 ;</p><p><b>  }</b></p><p><b>  //撤消移動(dòng)操作</b></p>

46、<p>  public void undomoving(){</p><p>  for ( int i = 0 ; i < countAccessibility ; i ++ ){</p><p>  KnightsTour.access[ xpos [i] ][ ypos[i] ] ++ ; }</p><p>  KnightsTour.

47、access[ ownxpos ][ ownypos ] = ownAccessibility ;</p><p><b>  }</b></p><p><b>  }</b></p><p><b>  圖形化界面</b></p><p>  圖形化界面是我的搭檔做的,我就

48、簡(jiǎn)單的說(shuō)一下吧!</p><p>  本程序是Applet的圖形界面以及如何利用圖形用戶界面的控件接受用戶信息,并用圖形或圖像顯示結(jié)果.</p><p> ?。?)MyPanel函數(shù)實(shí)現(xiàn)圖形化顯示結(jié)果, MyPanel類就是畫(huà)圖類.首先用</p><p>  兩種不同顏色的方塊(WHITE和BIACK)顯示出棋盤,還有其他兩種方塊(WKNIGHT和BKNIGHT),

49、這兩種方塊上都有騎士,但顏色不一樣.在騎士游歷過(guò)程中不斷用后來(lái)兩種有騎士的方塊代替前兩種方塊,其中需要注意的是保持棋盤的顏色一致性.如圖3.4.2所示.將其設(shè)置為靜態(tài)變量,方便使用,防止修改時(shí)出錯(cuò). </p><p>  圖3.4.2 騎士游歷游戲中的棋盤用圖</p><p> ?。?)其次就是要顯示騎士起始位置,剛走過(guò)的步的位置和現(xiàn)在的位置,用邊框的不同來(lái)加以區(qū)別,采用函數(shù)g.setC

50、olor(Color.green)(剛走過(guò)的步顯示為綠色)和g.setColor(Color.biue)( 當(dāng)前的步顯示為藍(lán)色)實(shí)現(xiàn).這個(gè)類的對(duì)象在主類KnightsTour中被實(shí)例化.</p><p>  3.4.3 主調(diào)用程序的設(shè)計(jì)和開(kāi)發(fā)</p><p>  KnightsTour類是控制類,它完成對(duì)算法類和畫(huà)圖類的調(diào)用.由于JAVA的GUI編程是事件驅(qū)動(dòng)的,因此在KnightsTo

51、ur類中,通過(guò)監(jiān)聽(tīng)前面介紹的幾個(gè)Button的事件相應(yīng),完成程序的調(diào)用過(guò)程.</p><p>  采用二維數(shù)組表示初始位置位于某個(gè)位置的可達(dá)到數(shù), 即以棋盤任意一點(diǎn)為初試位置,騎士游歷完整個(gè)棋盤的路徑數(shù).利用access[][]數(shù)組來(lái)表示這個(gè)二維數(shù)組. </p><p>  { 2, 3, 4, 4, 4, 4, 3, 2 },</p><p> 

52、 { 3, 4, 6, 6, 6, 6, 4, 3 },</p><p>  { 4, 6, 8, 8, 8, 8, 6, 4 },</p><p>  { 4, 6, 8, 8, 8, 8, 6, 4 },</p><p>  { 4, 6, 8, 8, 8, 8, 6, 4 },</p

53、><p>  { 4, 6, 8, 8, 8, 8, 6, 4 },</p><p>  { 3, 4, 6, 6, 6, 6, 4, 3 },</p><p>  { 2, 3, 4, 4, 4, 4, 3, 2 }};</p><p>  本程序中在KnightsTour類中添加了兩個(gè)按鈕

54、</p><p>  JButton nextMoving = new JButton( "NextMoving" );</p><p>  JButton nextTour = new JButton( "NextTour" );</p><p>  用于用戶對(duì)游戲進(jìn)行操作,這兩個(gè)按鈕分別有事件響應(yīng).</p>

55、<p>  nextMoving.addActionListener(</p><p>  //匿名內(nèi)部類,定義了actionPerformed函數(shù),調(diào)用showNext函數(shù)響應(yīng)Next Moving Button事件</p><p>  new ActionListener() {</p><p>  public void actionPerforme

56、d ( ActionEvent e ) {</p><p>  myPanel.showNext() ; }</p><p><b>  }</b></p><p>  );//end call to addActionListener</p><p>  nextTour.addActionListener(<

57、;/p><p>  //內(nèi)部類定義了actionPerformed函數(shù),響應(yīng)Next Tour Button事件</p><p>  new ActionListener() {</p><p>  public void actionPerformed ( ActionEvent e ) {</p><p>  if ( recordCount

58、 < recordXpos.length - 1 ) {</p><p>  recordCount ++ ;</p><p>  } else { recordCount = 0 ; }</p><p>  myPanel.initboard ( recordXpos [ recordCount ] , </p><p>  re

59、cordYpos [ recordCount ] );</p><p>  myPanel.repaint();</p><p><b>  }</b></p><p><b>  }</b></p><p>  );//end call to addActionListener</p>

60、<p><b>  測(cè)試數(shù)據(jù)及期望結(jié)果</b></p><p>  程序能正常運(yùn)行,能經(jīng)過(guò)64格中的每一格而只經(jīng)過(guò)一次,并可以執(zhí)行相應(yīng)的操作。</p><p><b>  四 系統(tǒng)測(cè)試</b></p><p>  騎士游歷程序運(yùn)行結(jié)果如下:</p><p>  圖4.1 騎士游歷游戲

61、進(jìn)入界面</p><p>  圖4.2騎士游歷游戲以(1,1)為起點(diǎn)運(yùn)行圖</p><p>  圖4.3 騎士游歷游戲以(5,4)為起點(diǎn)</p><p>  圖4.4 騎士游歷游戲以(5,4)為起點(diǎn)運(yùn)行圖</p><p>  圖4.5 騎士游歷游戲全部運(yùn)行的運(yùn)行圖</p><p>  圖4.6 小應(yīng)用程序中的克隆操作&

62、lt;/p><p>  圖4.7 小應(yīng)用程序中的標(biāo)記操作</p><p>  圖4.8 小應(yīng)用程序中的字符編碼和屬性的操作</p><p>  五 總結(jié)或心得體會(huì)</p><p>  通過(guò)這次的java課程設(shè)計(jì),我收獲了很多,學(xué)到了很多知識(shí),同時(shí)也</p><p>  發(fā)現(xiàn)了自己許多的不足。</p>&

63、lt;p>  通過(guò)騎士游歷程序的設(shè)計(jì),我更加了解了eclipse的集成卡發(fā)環(huán)境的使用,</p><p>  雖然這個(gè)課題是所有的課題中最簡(jiǎn)單的,按照參考書(shū)上的程序可以得出正確結(jié)果。但是剛開(kāi)始導(dǎo)入程序的時(shí)候并沒(méi)有那么簡(jiǎn)單,剛開(kāi)始時(shí)只把程序?qū)нM(jìn)去了,沒(méi)導(dǎo)入圖片,運(yùn)行的結(jié)果就沒(méi)有圖片,只有幾個(gè)有顏色的矩形框,后來(lái)才發(fā)現(xiàn)是圖片沒(méi)導(dǎo)進(jìn)去,真是粗心!這讓我明白了寫(xiě)程序要細(xì)心。</p><p> 

64、 還有如果遇到問(wèn)題,不找出問(wèn)題的根本,就無(wú)法理解自己獲得的是什么。做這個(gè)課程設(shè)計(jì)中,我將掌握的專業(yè)理論知識(shí)很好地運(yùn)用到對(duì)這個(gè)課題的理解中.做到了理論和實(shí)踐相結(jié)合,在實(shí)踐中加深了對(duì)專業(yè)理論知識(shí)的理解,并提升了對(duì)理論知識(shí)的運(yùn)用能力,獲得了許多寶貴的經(jīng)驗(yàn)。還學(xué)到了很多書(shū)本上沒(méi)有的知識(shí)。一個(gè)好的程序,應(yīng)該能讓別人容易讀懂,所以變量名盡量用英文單詞而不要用單個(gè)字母表示,還有代碼中應(yīng)該要有足夠多的注釋。當(dāng)遇到某個(gè)功能無(wú)法實(shí)現(xiàn)時(shí),我會(huì)上網(wǎng)先百度,看看

65、網(wǎng)上有沒(méi)有好的解決方案,實(shí)在找不到的話可以找老師或同學(xué),通過(guò)她們提供的接口、類之類的,然后查詢那個(gè)幫助文檔。</p><p>  我也理解了小組合作的重要性,真正理解了作為一個(gè)計(jì)算機(jī)學(xué)習(xí)者不僅要學(xué)好計(jì)算機(jī)知識(shí),同時(shí)也要與自己的搭檔配合,共同克服困難。騎士游歷課程設(shè)計(jì)是我和同學(xué)一起探討,一起慢慢理解,直至最后一起完成的,所以說(shuō)不管有什么樣的困難,團(tuán)隊(duì)的合作一定能將大問(wèn)題變小問(wèn)題,再講小問(wèn)題逐個(gè)擊破??傊?,這次的課程

66、設(shè)計(jì)讓我受益匪淺。</p><p>  這個(gè)課程設(shè)計(jì)的順利完成,讓我對(duì)騎士游歷程序的開(kāi)發(fā)的整個(gè)流程有了深刻地了解和系統(tǒng)地掌握。</p><p><b>  六 參考文獻(xiàn)</b></p><p>  1. 陳明.Java語(yǔ)言程序設(shè)計(jì)課程實(shí)踐.北京:清華大學(xué)出版社,2008.</p><p>  2. 楊樹(shù)林、胡潔萍.Ja

67、va語(yǔ)言最新實(shí)用案例教程.北京:清華大學(xué)出版社,2006.</p><p>  3.譚浩強(qiáng).Java程序設(shè)計(jì)(第二版).北京:清華大學(xué)出版社,2006.</p><p>  4.譚浩強(qiáng).Java程序設(shè)計(jì)(第二版)題解與上機(jī)指導(dǎo)(修訂版),2010.附錄</p><p>  5.黃曉東.《Java課程設(shè)計(jì)案例精編》.中國(guó)水利水電出版社,2007年</p>

68、<p>  6.袁然,鄭自國(guó),鄒豐義.《java案例開(kāi)發(fā)集錦》,電子工業(yè)出版社,2005年</p><p><b>  七 附錄</b></p><p><b>  程序源代碼:</b></p><p>  package test;</p><p>  import java.awt

69、.*;</p><p>  import java.awt.event.*;</p><p>  import javax.swing.*;</p><p>  //import java.awt.image.*;</p><p>  public class KnightsTour extends JApplet {</p>

70、<p><b>  /**</b></p><p><b>  * </b></p><p><b>  */</b></p><p>  private static final long serialVersionUID = 1L;</p><p>  // 初始

71、位置位于某個(gè)位置的可達(dá)到數(shù)采用二維數(shù)組表示</p><p>  //即以棋盤任意一點(diǎn)為初試位置,騎士游歷完整個(gè)棋盤的路徑數(shù)</p><p>  public static int access[][] = {</p><p>  {2,3,4,4,4,4,3,2},</p><p>  {3,4,6,6,6,6,4,3},</p>

72、<p>  {4,6,8,8,8,8,6,4},</p><p>  {4,6,8,8,8,8,6,4},</p><p>  {4,6,8,8,8,8,6,4},</p><p>  {4,6,8,8,8,8,6,4},</p><p>  {3,4,6,6,6,6,4,3},</p><p>  {2

73、,3,4,4,4,4,3,2}};</p><p>  public static int accessbak[][] = arrayCopy ( access ) ;</p><p>  int countMoving = -1 ;</p><p>  int tourXpos [] = new int [ 64 ];//游歷中,X,Y都有64個(gè)位置</p&

74、gt;<p>  int tourYpos [] = new int [ 64 ];</p><p>  private int recordXpos [][]; private int recordYpos [][];</p><p>  private int recordCount = - 1 ;</p><p>  private b

75、oolean success = false;</p><p>  MyPanel myPanel ;//聲明 MyPanel的一個(gè)對(duì)象</p><p>  public void tour ( int xpos ,int ypos ){//成員函數(shù)</p><p>  // int x,y;</p><p>  countMovi

76、ng ++ ;</p><p>  //如果64個(gè)格子都被走過(guò),則返回</p><p>  if (countMoving == 63 )</p><p>  { tourXpos [ countMoving ] = xpos ;</p><p>  tourYpos [ countMoving ] = ypos ;</p>

77、<p>  success = true ;</p><p>  countMoving -- ;</p><p><b>  return ;</b></p><p><b>  }</b></p><p>  AccessibleSquares nextSquare = new Acc

78、essibleSquares( xpos, ypos );</p><p>  //初試化 AccessibleSquares對(duì)象,給nextSquare分配內(nèi)存</p><p>  while (nextSquare.hasMoreAccessible())</p><p>  //利用AccessibleSquares()對(duì)象調(diào)用hasMoreAccessibl

79、e()成員函數(shù)</p><p>  { // 開(kāi)始移動(dòng)</p><p>  nextSquare.domoving();//調(diào)用 nextSquare.domoving()函數(shù)</p><p>  //把這一步記錄下來(lái)</p><p>  tourXpos [ countMoving ] = xpos ;</p><p&

80、gt;  tourYpos [ countMoving ] = ypos ;</p><p>  // 嘗試下一步的移動(dòng)</p><p>  nextSquare.nextAccessible();</p><p>  tour ( nextSquare.getXpos() , nextSquare.getYpos() );</p><p>

81、  //如果64個(gè)格子都被走過(guò),則返回</p><p>  if ( success )</p><p>  { countMoving -- ;</p><p>  return ; }</p><p>  //如果失敗,則從起始位置從新開(kāi)始</p><p>  nextSquare.undomoving();&

82、lt;/p><p><b>  }</b></p><p>  countMoving -- ;</p><p><b>  }//游歷方法結(jié)束</b></p><p><b>  //定義棋盤行和列</b></p><p><b>  //先定義

83、一行棋盤</b></p><p>  public static int[] arrayCopy ( int array1[] )//定義一個(gè)整形數(shù)組arrayCopy</p><p>  { int[]array2 = new int [array1.length];</p><p>  for ( int row = 0 ; row < ar

84、ray1.length ; row ++ )</p><p>  { array2 [ row ] = array1 [ row ] ; };</p><p>  return array2;</p><p><b>  }</b></p><p>  //復(fù)制數(shù)組,即定義出棋盤列</p><

85、p>  public static int[][] arrayCopy ( int array1[][] )</p><p>  { int[][] array2 = new int [array1.length][array1[0].length];</p><p>  for ( int row = 0 ; row < array1.length ; row ++ )&

86、lt;/p><p>  { for ( int column = 0 ; column < array1[0].length ; column ++ )</p><p>  { array2 [ row ][ column ] = array1 [ row ][ column ]; };</p><p><b>  };</b><

87、/p><p>  return array2;</p><p><b>  }</b></p><p>  //棋盤數(shù)組函數(shù)初始化</p><p>  public void initialArray ( int chessBoard[][] )</p><p>  { for ( int row

88、 = 0 ; row < 8 ; row ++ )</p><p>  { for ( int column = 0 ; column < 8 ; column ++ )</p><p>  { chessBoard [ row ][ column ] = 0 ; };</p><p><b>  };</b></p&g

89、t;<p><b>  }</b></p><p>  public static void main( String args[] ) {</p><p>  KnightsTour application = new KnightsTour();</p><p>  application.tour( 0 , 0 );<

90、/p><p><b>  }</b></p><p>  public void init () {</p><p>  recordCount = -1 ;</p><p>  recordXpos = new int [ 64 ][ 64 ] ; recordYpos = new int [ 64 ][ 64 ]

91、;</p><p>  for (int row = 0 ; row < 8 ;row ++){</p><p>  for ( int column = 0 ; column < 8 ; column ++ ){</p><p>  success = false ;</p><p>  countMoving = -1;<

92、;/p><p>  access = arrayCopy ( accessbak );</p><p>  tour ( row ,column );</p><p>  recordCount ++ ;</p><p>  recordXpos [ recordCount ] = arrayCopy ( tourXpos ) ;</p&g

93、t;<p>  recordYpos [ recordCount ] = arrayCopy ( tourYpos ) ;</p><p><b>  }</b></p><p><b>  }</b></p><p>  recordCount = 0 ;</p><p>  myP

94、anel = new MyPanel( recordXpos [ 0 ] ,recordYpos [ 0 ]) ;</p><p>  JPanel buttonPanel = new JPanel();</p><p>  JButton nextMoving = new JButton( "Next Moving" );</p><p>  

95、JButton nextTour = new JButton( "Next Tour" );</p><p>  buttonPanel.add( nextTour );</p><p>  buttonPanel.add( nextMoving );</p><p>  getContentPane().add( buttonPanel, Bo

96、rderLayout.SOUTH );</p><p>  getContentPane().add( myPanel );</p><p>  nextMoving.addActionListener(</p><p>  //匿名內(nèi)部類,定義了actionPerformed函數(shù),調(diào)用showNext函數(shù)響應(yīng)Next Moving Button事件</p&g

97、t;<p>  new ActionListener() {</p><p>  public void actionPerformed ( ActionEvent e ) {</p><p>  myPanel.showNext() ; }</p><p><b>  }</b></p><p>  

98、);//end call to addActionListener</p><p>  nextTour.addActionListener(</p><p>  //內(nèi)部類定義了actionPerformed函數(shù),響應(yīng)Next Tour Button事件</p><p>  new ActionListener() {</p><p>  

99、public void actionPerformed ( ActionEvent e ) {</p><p>  if ( recordCount < recordXpos.length - 1 ) {</p><p>  recordCount ++ ;</p><p>  } else { recordCount = 0 ; }</p>

100、<p>  myPanel.initboard ( recordXpos [ recordCount ] , </p><p>  recordYpos [ recordCount ] );</p><p>  myPanel.repaint();</p><p><b>  }</b></p><p>&l

101、t;b>  }</b></p><p>  );//end call to addActionListener</p><p><b>  }</b></p><p>  public void paint (Graphics g )</p><p>  { super.paint( g ); }

102、</p><p>  }//end of class KnightsTour</p><p>  class AccessibleSquares {</p><p>  //騎士8個(gè)方向走L形狀所需的X坐標(biāo)和Y坐標(biāo)的變化量</p><p>  private static int horizontal[] = {2,1,-1,-2,-2,-1

103、,1,2};</p><p>  private static int vertical [] = {-1,-2,-2,-1,1,2,2,1};</p><p>  private int xpos[] ;//騎士所處X軸的坐標(biāo)</p><p>  private int ypos[] ;//騎士所處y軸的坐標(biāo)</p><p>  priv

104、ate int accessibility [];//表示可達(dá)到數(shù)</p><p>  private int ownxpos ,ownypos ;</p><p>  private int ownAccessibility ;</p><p>  private int arrayPos ;</p><p>  private int c

105、ountAccessibility;</p><p>  public AccessibleSquares(int x , int y ){//構(gòu)造函數(shù)</p><p>  int testXPos; int testYPos;</p><p>  xpos = new int [ 8 ];//騎士所處X軸的坐標(biāo)</p><p>  

106、ypos = new int [ 8 ];</p><p>  accessibility = new int [ 8 ];</p><p>  arrayPos = 0 ;</p><p>  ownxpos = x ; ownypos = y ;</p><p>  ownAccessibility = KnightsTour.ac

107、cess[ x ][ y ];</p><p>  for (int i = 0 ; i < horizontal.length ; i++ ){//有八種到達(dá)的情況</p><p>  testXPos = x + horizontal[ i ];//得出X,Y坐標(biāo)的測(cè)試位置</p><p>  testYPos = y + vertical [ i ];

108、</p><p>  if ( (testXPos >= 0 ) & ( testXPos < 8 ) &</p><p>  (testYPos >= 0 ) & ( testYPos < 8 ) ) {//判斷測(cè)試位置是否在棋盤內(nèi)</p><p>  xpos [ arrayPos ] = testXPos ;//

109、由測(cè)試位置給出正確X,Y坐標(biāo)</p><p>  ypos [ arrayPos ] = testYPos ;</p><p>  accessibility [ arrayPos ] = KnightsTour.access [testXPos][testYPos];</p><p>  //利用對(duì)應(yīng)的X,Y坐標(biāo)得出相應(yīng)的可到達(dá)的路徑總數(shù)</p>&

110、lt;p>  // accessibility [ arrayPos ] = 0 表明格子已經(jīng)被占據(jù)</p><p>  if (accessibility [ arrayPos ] > 0 ) arrayPos ++ ;</p><p>  }//尋找空格子結(jié)束</p><p>  }// 結(jié)束for循環(huán),尋找結(jié)束</p><

111、p>  countAccessibility = arrayPos ;//統(tǒng)計(jì)可達(dá)到數(shù)</p><p>  if (countAccessibility > 0 ) {sortAll();}</p><p>  arrayPos = -1 ;</p><p><b>  }</b></p><p>  p

112、ublic boolean hasMoreAccessible(){</p><p>  // arrayPos + 1 指向下一個(gè)可行的</p><p>  if ( (arrayPos + 1 ) < countAccessibility ){</p><p>  return true; }</p><p>  else { re

113、turn false; }</p><p>  }// hasMoreAccessible()方法結(jié)束</p><p>  public AccessibleSquares nextAccessible(){</p><p>  arrayPos ++ ;</p><p>  return this;</p><p>

114、<b>  }</b></p><p>  public AccessibleSquares accessibleAt( int pos){</p><p>  if ((pos >= 0) & (pos < countAccessibility ))</p><p>  arrayPos = pos ;</p>

115、<p>  return this;</p><p><b>  }</b></p><p>  public int getXpos(){</p><p>  return xpos[ arrayPos ]; }</p><p>  public int getYpos(){</p&

116、gt;<p>  return ypos[ arrayPos ]; }</p><p>  public int getAccessibility(){</p><p>  return accessibility[ arrayPos ]; }</p><p>  public int getTotalAccessible(){&l

117、t;/p><p>  return countAccessibility; }</p><p>  //冒泡排序法.冒泡排序的基本概念是:依次比較相鄰的兩個(gè)數(shù),將大數(shù)放在前面,小數(shù)放在后面。</p><p>  private void sortAll (){</p><p>  for ( int begin = 0 ; begin

118、 < countAccessibility - 1 ; begin ++ ){</p><p>  for ( int i = begin + 1; i < countAccessibility ; i ++ ){</p><p>  if ( accessibility [ begin ] > accessibility [ i ] ){</p><

119、p>  swapAll( begin, i ); }//end of if</p><p>  }// end of inner for</p><p>  }// end of outer for</p><p>  }// end of sortAll</p><p><b>  //交換兩個(gè)數(shù)</b><

120、;/p><p>  private void swapAll ( int i , int j ){</p><p>  int temp ;</p><p>  temp = xpos [ i ]; xpos [ i ] = xpos [ j ]; xpos [ j ] = temp;</p><p>  temp = ypos [ i

121、 ]; ypos [ i ] = ypos [ j ]; ypos [ j ] = temp;</p><p>  temp = accessibility [ i ];</p><p>  accessibility [ i ] = accessibility [ j ]; accessibility [ j ] = temp;</p><p><

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 眾賞文庫(kù)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論