這是一個多義詞詞條。它可以指“為掌握某一課程內容所進行的設計”,見概念中的課程設計(Practicum),此含義的課程設計也稱作“課程實習”;也可以指“對某一門課程進行教學策劃的研究活動”,見概念中的課程設計(Curriculum desig, 以下是為大家整理的關于java課程設計心得體會3篇 , 供大家參考選擇。
java課程設計心得體會3篇
【篇1】java課程設計心得體會
java課程設計心得體會
【篇一:java課程設計總結報告】
閩南師范大學計算機學院
java課程設計總結報告
【篇二:1203090107秦民《java程序設計》課程設計報告】
武漢工商學院
項目名稱: java課程上機考試系統學生姓名: 秦民學 號: 1203090107班 級: 12計科本1指導教師: 喻曉陳濤
2014年 5月 19日
目錄
1. 選題的背景 ...................................................................................................................................... 1
1.1
1.2
1.3 國內外選題現狀 ..................................................................................................................... 1 開發技術概述 ......................................................................................................................... 1 系統流程分析 ......................................................................................................................... 2
2. 功能設計 .......................................................................................................................................... 4
2.1
3. 詳細設計 .......................................................................................................................................... 5
3.1界面設計 ....................................................................................................................................... 5
3.2關鍵代碼說明 ............................................................................................................................... 7
4. 系統測試 .......................................................................................................................................... 9
總結 ........................................................................................................................................................ 10
參考文獻 ................................................................................................................................................ 11
源代碼 .................................................................................................................................................... 12
1. 選題的背景
1.1 國內外選題現狀
在21世紀科技高速發展的現在,面對中國目前的基本國情,教育業的發展依舊停留在應試教育的基礎之上,考試就成為了教學過程中不可或缺的一個重要組成部分。作為發現和選拔人才的有效手段,也漸漸的走向了自動化、智能化的道路,為了減輕教師的負擔,避免了重復工作,更好的實現考教分離,所以考試試卷的自動生成系統便漸漸的走進了教師的教學工作之中。
目前隨著我國高等教育水平的不斷提高,計算機直接介入了教學過程,并承擔了教學工作中一些重要環節,但是由于我國目前處于社會主義初級階段的基本國情的約束,教師的工作量大,不僅要負擔教學工作,而且還要承擔試題的編輯,批閱等多方面的工作,在這樣的環境下試卷自動生成系統應運而生,它可以通過教師預先設置的試題庫中智能的篩選出合適的試題,再通過文本編輯軟件顯示出來,它的出現無疑大大減輕了教師的負擔,成為了教育工作中一個實用性高的教學工具,漸漸的在我國發展起來。
1.2 開發技術概述
1. 本系統使用的技術概述
(1)gui技術簡介
通過gui技術,用戶和程序之間可以方便地進行交互!
(2)輸入輸出流簡介
輸入、輸出流提供一條通道程序,可以使用這條通道讀取源中的數據或把數據傳送到目的地。
2.系統測試環境
a. 被測試軟件系統的名稱
課程設計項目——java課程上機考試系統
b. 系統任務提出者
喻曉、陳濤老師
c. 系統開發者
1班:秦民
d. 系統用戶及安裝此軟件的計算中心
1-705機房、1-709機房、1-708機房、1-104機房
e. 測試環境與實際運行環境之間的差異以及這些差異對測試結果的影響
測試環境:
windows xp、JDK1.6。
1.3 系統流程分析
首先用戶進入首頁會提示用戶開始做題,題目顯示在相應的文本區域,題目下方會有相應的選項按鈕供用戶進行選擇,并確定最終答案。做完一題之后用戶可以選擇做下一題或是重新做題的選項,選擇做下一題程序就會將下一題的內容顯示在相應的文本區域,選擇重新做題程序將會調回首題開始重新答題。在以上的基礎之上這行程序,知道做到之后一題,之后程序將會給出相應的提示,用戶可以選擇保存做題結果,程序會將用戶的最終的得分情況顯示在相應的選定區域中。
下圖為系統流程圖(圖1-1)。
圖1-1 系統流程圖
【篇三:完成java面向對象程序設計實驗課的心得體會】
java面向對象程序設計實驗課的心得體會 經過這幾周對java面向對象程序設計的學習,讓我更加了解到java學習的重要性。
在實驗課上,我們完成多個實驗,在這個階段的學習中,我從認識到熟悉,而后到能夠自主運用。通過對java的了解,我發現它確實有很多方便之處,它集抽象性、封裝性、繼承性和多態性于一體,實現了代碼重用和代碼擴充,提高了軟件開發的效率。對于我們這個專業來說學好java語言是很重要的,所以在實驗的過程中我都盡力理解java編程思想、掌握基本技巧,盡量學到最多的知識。 學習程序設計的基本目的就是培養描述實際問題的程序化解決方案的關鍵技能,java面向對象程序設計是一門實踐性比較強的課程,在實際中,我們必須把理論和實踐結合起來。在實驗中,我們理解理論課上的知識,然后運用到實際的操作中,我們必須在現有的理論的基礎上,進行實踐。多次實驗后,也讓我看到了現在學習的一個很大弱點:只聽不練,永遠不會熟練運用;空記技巧,忽略思想,會在多變的習題中十分無奈。
java思想:java是一門面向對向語言,他定義一切都是對象 面向對象,就是面對現實;
現實中的一切都是對象,他們有分類,就產生了“類”; 他們有不同,類和類之間的不同,使用類來區分; 同一個類中不同的對象的區別,使用成員區分。
所以,面向對象的內部邏輯是分類。 面向對象編程思想就象數學上的一些概念,如:空間、群、環、域等
原始的編程思想就象古典數學,人們只在一個集合上探討問題,沒有系統的方法(即運算)定義,于是仁者見仁、智者見智,這樣在一定程度上造成了理論的一種混亂局面,不利于科學的發展。于是近代數學向公理化發展,這是什么意思呢?就是說,人們除了在限定論域(即上面的集合,面向對象也有此概念)外,還在此論域上加進了一套通用的、公認的運算(方法);集合加上集合上定義的運算就構成了數學上的空間、群等,在計算機領域里,就變成為“類”。這種集合上定義了操作的東西利用起來就方便多了,這使得人們討論問題時都在給定集合的運算能力上下工夫,即有通用性可事半功倍。
面向對象的編程思想就要想近世代數的分析思想,首先要確定“論域”,即工程所涉及到的所有的“對象”,然后要分類處理,把隸屬同一類別的對象集合在一起(做成一個集合),定義他們之間的運算性質及可以進行的操作,這樣就構建了一個類,當然以后用到這個類的對象時都要通過已經定義了的操作來完成各項功能,這就是常要求的類的“類的成員變量要通過共有函數來操作”。
我想真正的面向對象編程思想不應該是編程思想,應該是面向對象的分析方法才對!
我的理解:
1、將分析過程為抽象的過程:簡言之:分成多個小問題(組成部分),
直到無法再細;
2、對每個對象(小問題)進行分析,抽象,提取處共同的內容(數據成員和操作方法),
3、有相似的對象的,構造基類;再有基類派生出各個確定的對象(小問題);
4、解決問題的過程就是操作這些對象的過程。
我的理解:
與實際生活聯系起來。
將要處理的?問題?抽象成一個或多個?事件?
找一個地方使用我的智慧
1。了解系統的功能。列舉出它的對外接口,即對于使用者來說它有什么功能。把這整個系統作為一個對象。
2。環境。系統不是運行在真空中的,操作系統等外部環境都可能會影響它。所以把環境也作為一個大的對象。
3。內部。在系統的內部,一般都比較復雜,一般的做法是規定一個粒度,枚舉出該粒度上所有的物體。比如說人體,如果在器官的粒度上,就有心,肝,肺。而小于該粒度的物體(或稱對象),比如血細胞,就忽略,作為其它物體(或稱子系統的內部對象)。
4。子系統。不斷縮小粒度,沿用步驟1~3,直到不能再抽象為止。
5。無形的物體。一個完整的互連的系統需要許多無形的物體,比如消息等了,一般這樣的對象比較難發現。當你發現各個子系統無法正確合作或理順關系時,試著加入一些輔助對象。
一切都是為了讓人明白,有能讓機器理解的思想
我想分析和抽象能力的高低是個關鍵,首先要從問題域分析和抽象出準確的對象模型,再根據這些模型進行處理,當然在過程種少不了樓上前輩們說的一些思想和細節,但是別忘了,我們的目的是解決問題,不要為了面向對象而面向對象!
我想分析和抽象的能力對這個問題是個關鍵。首先要在問題域仔細分析、抽象得到相關的對象模型,然后才是相應的設計。可是面向對象只是我們解決問題一種思想,切不可忘了問題本身,弄成為了面向對象而面向對象了!當然過程種少不了樓上一些前輩說的思想和細節了。
耕具我多年的實踐:面向對象包括兩個思想:
從大往小想,從小往大做
從難往易想,從易往難做
同意一下觀點-----能深入淺出,真高手也!
真正的面向對象編程思想就是忘掉一切關于計算機的東西,從問題領域考慮問題, :-)
把問題從大到小都抽象成對象(指針只是對象的使用形式),在設計和編寫程序的時候把你設計的對象合理的編排組合就是面向對象編程了。
面向對象,就是面對現實;
現實中的一切都是對象,他們有分類,就產生了“類”;
他們有不同,類和類之間的不同,使用類來區分;
同一個類中不同的對象的區別,使用成員區分。
所以,面向對象的內部邏輯是分類。 對象:
對象是人們要進行研究的任何事物,從簡單的一個小分子到復雜的汽車飛機都可以看做對象,只是有時對象要根據人們研究問題的需要來確定,對象不一定是具體的,有時也可以表示抽象的規則或計劃。
類:
類在java中是具有相同或相似性質的對象的抽象體現形式。也就是說,類的實例化就是創建對象的過程類的實例就是對象。
【篇2】java課程設計心得體會
課程設計心得體會
范文一
整個設計通過了軟件和硬件上的調試。我想這對于自己以后的學習和工作都會有很大的幫助。在這次設計中遇到了很多實際性的問題,在實際設計中才發現,書本上理論性的東西與在實際運用中的還是有一定的出入的,所以有些問題不但要深入地理解,而且要不斷地更正以前的錯誤思維。一切問題必須要靠自己一點一滴的解決,而在解決的過程當中你會發現自己在飛速的提升。對于教材管理系統,其程序是比較簡單的,主要是解決程序設計中的問題,而程序設計是一個很靈活的東西,它反映了你解決問題的邏輯思維和創新能力,它才是一個設計的靈魂所在。因此在整個設計過程中大部分時間是用在程序上面的。很多子程序是可以借鑒書本上的,但怎樣銜接各個子程序才是關鍵的問題所在,這需要對系統的結構很熟悉。因此可以說系統的設計是軟件和硬件的結合,二者是密不可分的。通過這次課程設計我也發現了自身存在的不足之處,雖然感覺理論上已經掌握,但在運用到實踐的過程中仍有意想不到的困惑,經過一番努力才得以解決。
這也激發了我今后努力學習的興趣,我想這將對我以后的學習產生積極的影響。其次,這次課程設計讓我充分認識到團隊合作的重要性,只有分工協作才能保證整個項目的有條不絮。另外在課程設計的過程中,當我們碰到不明白的問題時,指導老師總是耐心的講解,給我們的設計以極大的幫助,使我們獲益匪淺。因此非常感謝老師的教導。通過這次設計,我懂得了學習的重要性,了解到理論知識與實踐相結合的重要意義,學會了堅持、耐心和努力,這將為自己今后的學習和工作做出了最好的榜樣。我覺得作為一名軟件工程專業的學生,這次課程設計是很有意義的。更重要的是如何把自己平時所學的東西應用到實際中。雖然自己對于這門課懂的并不多,很多基礎的東西都還沒有很好的掌握,覺得很難,也沒有很有效的辦法通過自身去理解,但是靠著這一個多禮拜的“學習”,在小組同學的幫助和講解下,漸漸對這門課逐漸產生了些許的興趣,自己開始主動學習并逐步從基礎慢慢開始弄懂它。
我認為這個收獲應該說是相當大的。一開始我們從參考書上找來了課題,但是畢竟是參考書,做到后來發現很多程序都是不完整的,這讓我們傷透了腦筋。看著別的小組都弄得有模有樣了,可是我們連一個課題都還沒有定好。好不容易又找到了課題,可是結果還是很不盡人意。程序接線什么的都弄好了,調試也沒有問題,可是就是無法達到預期想要的結果。參考書畢竟只是一個參考,設計這種東西最后還是要靠自己動腦筋。然后我們大家一起齊心協力,從平時做的實驗﹑老師上課的舉例﹑書本上的知識以及老師的輔導和其他同學的幫助下終于完成了。應該說這是通過我們小組成員的共同努力和動腦完成的,雖然內容并不是很復雜,但是我們覺得設計的過程相當重要,學到了很多,收獲了很多。我覺得課程設計反映的是一個從理論到實際應用的過程,但是更遠一點可以聯系到以后畢業之后從學校轉到踏上社會的一個過程。小組人員的配合﹑相處,以及自身的動腦和努力,都是以后工作中需要的。
所以我認為這次的課程設計意義很深,和其他4位同學的共同學習﹑配合﹑努力的過程也很愉快,另外還要感謝老師的耐心輔導。
范文二
對于此次課程設計,我早在寒假就借了linux相關書籍參看,但上面講的主要是有關linux操作方面的內容,編程方面講得很少,而且在假期中也并不知道課設的題目是什么,因此此次課設基本上都是在開學后的這兩周內完成的。
以前做過的軟件方面的課設如C語言課設、數據結構課設都是在假期完成的,由于自己是一個十分追求完美的人,因此幾乎每次都花了將近大半個假期的時間來做,如C語言就花了一個多月的時間來做,分數當然也較高,有90來分。對于課程設計,我歷來都是相當認真的,此次操作系統的課程設計當然也不例外。可是linux以前沒怎么接觸過,學校也沒怎么系統地講過,在剛接到題目時除了知道如何用gcc編譯等等,幾乎可以算作處于一無所知的狀態。時間緊任務重,要從對linux一無所知的狀態到獨立出色地完成課設,不下點苦功夫是不成的。那兩周里我除了吃飯睡覺幾乎就沒離開電腦過,有時時間晚了食堂關門飯都沒得吃了。終于,在這樣近乎玩命地學習工作下,身體撐不住了,在第二周周三晚上我發燒了。但是眼看就要到檢查的日期了,而我的課設也就快完工了。我不想因為看病而耽誤下去弄得前功盡棄,因此只買了點藥,繼續在電腦前拼命……最后,總算趕在周五檢查前做出了較滿意的作品。
在周五檢查那天,老師看了我第4題后,又抽查了一下我的第3題,其實也只是要我把第3題運行一下而已罷了。若放在平時,這絕對是小菜一碟,但當時正在發燒,加上一點緊張,居然把模塊加載命令insmod 錯打成insmod 了,由于這個低級失誤造成心中慌亂,于是后面的一條生成設備文件命令mknod干脆就照著參考資料打上去了。于是老師認為我不熟,在那題上打了個半鉤。當時心里確實感到十分地遺憾和沮喪,心想所謂“臺上一分鐘,臺下十年功”,一分鐘若把握不好,也同樣盡毀十年功啊!
但最后,我終于明白,分數不過是個數字,知識才是自己的。通過這次課程設計,我確實學到了很多東西,多年后我可能已經忘記這次課設最后打了多少分,但這些學到的東西卻可以使我受益終生。除了知識技術上的東西,我更鍛煉了自己的快速學習能力;我學會了如何快速有效地從圖書館、網絡獲取自己需要的信息;我嘗到了在周圍很多同學拷來拷去時孤軍奮戰的痛苦;我體會了夜以繼日完成一個項目時中途過程的艱辛及最終完成后巨大的成就感……我更加深了人生的信心,以后面對任何一個困難的項目,我想我都不會懼怕,并最終能夠成功地將其完成。
感謝老師,感謝此次課程設計。雖然在其中吃了不少苦頭,但我毫不后悔,因為我滿載而歸。
范文三
時光飛逝,歲月如歌,繁忙的兩周課程設計轉眼間就結束了。在這兩周的時間里,我們每天在寢室—教室-食堂這三點一線的生活里,讓我們回憶起了那高中時代的點點滴滴,那久違的充實的而又溫馨的氣息涌入心頭,而這兩周時光也成為我在大學兩年里最為充實的學習時間。雖說每天8節課的的安排對于我們大學生來說,有點不可思議,但我們還是堅持著并沉浸在這課程設計的美好時光之中。
在這兩周的課程設計的學習中,前兩周我們忙于銅精煉反射爐的計算,而后一周我們則進行著銅精煉反射爐的圖紙的設計。在前一周的計算過程不僅檢驗者我們對有色冶金原理及設備的課程知識的了解及掌握程度,同時也培養了我們將所學知識同理論實際相結合的能力。而且,在設計過程中,當我們遇到問題時,我們同學之間相互討論,相互學習,相互監督,加強了同學之間的友誼,也讓我們學會了合作,學會了寬容,學會了理解,學會了做人與處世。
年產萬噸銅精煉的反射爐設計使我們也進工程專業的必修功課,也是對我們有色冶金化工過程原理及設備專業知識的綜合應用的實踐訓練,是我們鞏固、學習、運用專業知識必要的過程。同時,也是我們由學校邁向社會,從事職業工作前的必不可少的過程,所謂“千里之行,始于足下”,的確是真實的體現出來。通過這次課程設計,我深深的體會到了這句真理的的內涵,我現在認真的進行課程設計的任務,學會理論聯系實際,學會腳踏實地的邁開人生的一步就是為了明天的輝煌,為明天能穩健的在社會大潮中立足打下了堅實的基礎。
通過這次課程設計,我在各方面都有了一定程度的加強,通過對反射爐的計算及結構圖的設計,加強了對銅冶煉知識的了解及掌握,同時,綜合運用本專業所學知識及理論和生產實際的知識進行了一次同精煉反射爐的設計工作的實際問題從而培養基加強了我們的學習獨立自主能力,鞏固和擴從了有色冶金化工設備原理及設備等課程的內容,掌握了銅精煉反射爐的設計方法及步驟,掌握了銅精煉反射爐設計的基本知識,怎樣確定設計方案,了解反射爐的基本結構,提高了計算能力及繪圖的能力,熟悉了規范和標準,同時各科有關的的課程度有了全面的復習,獨立思考的能力也得到顯著的提高。
在這次設計過程中,體現出自己單獨設計反射爐的能力及綜合運用知識的能力,體現了學以致用,突出勞動成果的喜悅心情。同時,也從這次課程設計中發現了自已平時的學習的不足與薄弱環節,而這些也將是我們今后學習與工作需加強的方面。
在這課程設計結束之際,我衷心的感謝我們的課程設計郭年祥老師,郭老師教學嚴謹細致,一絲不茍的作風,固然讓們倍感不適應,但他的這種態度正是當今社會所需要的,是我們今后學習工作所需具備的能力。同時,感謝那些幫助過我的同學們,謝謝你們對我的幫助與支持,讓我倍感溫馨與充實。
最后,由于本人的專業知識及對實際問題的了解程度有限,在設計過程中難免出現錯誤,懇請老師多多指點,我十分樂意接受你們的批評與指正,謝謝!
【篇3】java課程設計心得體會
java,漢諾塔,課程設計,心得體會
篇一:基于JAVA漢諾塔游戲設計與實現
基于JAVA漢諾塔游戲設計與實現
院 系:計算機與電子系
專 業 班:計算機應用技術0902班
姓 名:高亞
學 號:XX2911057
指導教師:彭 文 藝
XX 年6月
基于JAVA漢諾塔游戲設計與實現
JAVA Tower of Hanoi-based Game
Design and Implementation
摘 要
Java是一種可以撰寫跨平臺應用軟件的面向對象的程序設計語言,是由Sun Microsystems公司于1995年5月推出的Java程序設計語言和Java平臺(即JavaSE, JavaEE, JavaME)的總稱。Java 技術具有卓越的通用性、高效性、平臺移植性和安全性,廣泛應用于個人PC、數據中心、游戲控制臺、科學超級計算機、移動電話和互聯網,同時擁有全球最大的開發者專業社群。在全球云計算和移動互聯網的產業環境下,Java更具備了顯著優勢和廣闊前景。
隨著時代的不斷發展進步,計算機已經融入我們的日常生活。很多時候,很多的問題想通過人的手來親自解決已變得十分困難了,這時我們就要運用計算機來幫我們解決這些復雜的問題,漢諾塔問題就是這類較復雜的問題。
此次,我們通過Eclipse軟件來解決漢諾塔問題。程序運行后會出現一個界面,界面上有各種操作提示,按照提示進行各種操作后會得到漢諾塔游戲的運行過程及結果。
關鍵詞: Java 漢諾塔 Eclipse
Abstract
Java is a cross-platform application software can write object-oriented programming language by Sun Microsystems, Inc. in May 1995 launch of the Java programming language and the Java platform (namely JavaSE, JavaEE, of JavaME) the general excellent versatility, efficiency, platform portability, and security of Java technology, widely used in personal PC, the data center, game consoles, scientific supercomputers, mobile phones and the Internet, while the world"s largest developer of professional community. Global cloud computing and mobile Internet industry environment, Java has significant advantages and broad prospects.
With the continual development and progress, the computer has been integrated into our daily lives. In many cases, a lot of problems to think through the human hand to personally resolve the very difficult, then we will use the computer to help us solve these complex issues. The Tower of Hanoi problem is that these more complex problems.
The Eclipse software to solve the Tower of Hanoi problem. After running a single interface, the interface on a variety of operating tips, follow the prompts to perform various operations will be the running process and the outcome of the Tower of Hanoi game.
Key words: Java Tower of Hanoi Eclipse
目 錄
摘要 .................................................................................................................... I Abstract ............................................................................................................. II 緒論 .................................................................................................................... 1 1 相關技術介紹 ................................................................................................. 2
開發工具........................................................................ 錯誤!未定義書簽。
應用環境...................................................................................................... 2
問題的提出 .................................................................................................. 2
任務設計內容 ............................................................................................... 3 2 系統需求分析 ................................................................................................. 4
界面及其布局設計 ........................................................................................ 4
A、B、C座的實現方法 .................................................................................. 4
成員變量 ................................................................................................... 5
方法 .......................................................................................................... 5
圓盤的實現方法 ........................................................................................... 6
Disc成員變量 ........................................................................................... 7
Disc方法………………………………………………………………7 3 系統總體設計 ................................................................................................. 8
總體類關系 .................................................................................................. 8
總體功能圖 .................................................................................................. 8
總體流程圖 .................................................................................................. 9 4 系統主要功能設計流程圖 .............................................................................. 10
A、B、C座實現流程圖……………………………………………………10
圓盤畫法流程圖…………………………………………………………10 5 系統詳細設計……………………………………………………………12 6 系統測試…………………………………………………………………17 結論 .................................................................................................................. 19 致謝 .................................................................................................................. 20 參考文獻 ........................................................................................................... 21
篇二:Hannoi塔java課程設計
文 獻 綜 述
題
學院
專
班
姓
目:Hannoi塔游戲和其java名稱: 電子與信息工程學院業: 計算機科學與技術級: 計科12-3 名: 12401010323
定稿日期: XX 年 1 月 10 日
1 概 述
課程設計目的
按課程設計指導書提供的課題,要求學生在自行完成各個操作環節,并能實現且達到舉一反三的目的,完成一個項目解決一類問題。要求學生能夠全面、深入理解和熟練掌握所學內容,并能夠用其分析、設計和解答類似問題;對此能夠較好地理解和掌握,能夠進行簡單分析和判斷;能編寫出具有良好風格的程序;掌握JAVA程序設計的基本技能和面向對象的概念和方法;了解多線程、安全和網絡等編程技術。同時培養學生進行分析問題、解決問題的能力;培養學生進行設計分析、設計方法、設計操作與測試、設計過程的觀察、理解和歸納能力的提高。
課程設計內容
我設計的Hannoi塔,除了要編寫的6個java文件所給出的類外,還需要java系統提供的一些重要的類,如JButton,JCheckBox等。漢諾塔中有三個座,名字分別為A,B,C。剛開始的時候A塔上有3個大小不等的盤子,這些盤子從座底到座頂按著大小順序依次擺放在A座上。用戶可以用鼠標選中盤子,然后通過拖動鼠標來移動盤子。釋放鼠標來放置該盤子。程序要求用戶在移動盤子的過程中,不允許吧大盤子放置在小盤子的上面,用戶最終要完成的是把A座上的全部盤子移動到B座或C座上
2 系統需求分析
系統目標
可以正常運行程序,并且按照設計目的預想的完成具體功能。
主體功能
1) 設計GUI界面的Hannoi塔。漢諾塔中有三個座,名字分別為A,B,C。初始狀態時A塔上有3個大小不等的盤子,這些盤子從座底到座頂按著大小順序依次擺放在A座上。用戶可以用鼠標選中盤子,然后通過拖動鼠標來移動盤子。釋放鼠標來放置該盤子。
2) 程序要求用戶在移動盤子的過程中,不允許吧大盤子放置在小盤子的上面,用戶最終要完成的是把A座上的全部盤子移動到B座或C座上。
3) 用戶可以通過Hannoi塔界面的提供的改變盤子數目功能來改變盤子的數目,同時可以改變盤子的大小以及改變盤子和界面的背景顏色,而且還可以選擇控制背景音樂的播放。
4) 用戶可以通過單擊Hannoi塔界面上提供的按鈕,讓程序自動完成把A座上的盤子全部移動到C座上。
5) 用戶在移動盤子的過程中,可以隨時單擊Hannoi塔界面上提供的按鈕,重新開始。
2
開發環境
JAVA程序設計語言及相應的集成開發環境,J2SDK和ECLIPSE開發工具。 3 系統概要設計
系統的功能模塊劃分
1) (主類)
HannoiWindow類負責創建Hannoi塔的主窗口,該類含有main方法,Hannoi塔從該類開始執行。HannoiWindow類的成員變量中有五種重要類型的對象、一個int基本型數據和一個char型數組。五種類型的對象分別是:Tower、JmenuBar、JmenuItem和Jbutton對象。
HannoiWindow類的主要成員的作用將在后面的詳細設計中闡述。
2)
Tower類是包中Jpanel容器的子類,創建的容器被添加到HannoiWindow窗口的中心。Tower類的成員變量中有四種重要類型的對象、一個int基本型數據和一個char型數組。四種類型的對象分別是:Disc、TowerPoint、HandleMouse、和AutoMoveDisc對象。Tower類的主要成員的作用將在后面的詳細設計中闡述。
3)
Disc類是Jbutton的一個子類,創建的對象時Tower容器中的一個按鈕,用來表示Tower中的“盤子”。
4)
TowerPoint類負責在Tower中創建表示位置的塔點對象。
5)
HandleMouse類創建的對象負責處理鼠標事件。
6)
AutoMoveDisc類創建的對象負責自動移動盤子從一個座到另一個座。
3
4系統詳細設計
總體功能設計
在設計hannoi塔時,需編寫6個java源文件:、、、、和。
Hannoi塔除了要編寫的6個Java源文件所給出的類外,還需要Java系統提供的一些重要的類,如JMenuBar、JMenu、JMenuItem和JButton。Hannoi塔所用到的一些重要的類以及之間的組合關系。
4 HannoiWindow類 圖 HannoiWindow類的UML圖 圖 類之間的組合關系
Tower類
1、成員變量
(1)amountOfDisc是int型數據。amountOfDisc值用來確定tower對象中盤子的數目,即確定tower對象中Disc類型數組disc的長度。
(2)disc是Disc型數組,該數組的長度由amountOfDisc值來確定。Disc數組的每個單元中存放一個Disc對象,依次表明tower對象中有怎樣多的盤子。
(3)towerName是char型數組,長度為3,其三個單元的默認取值依次是A、B和C。towerName是數組的單元的值用來確定tower中三個座的名字。
(4)maxDiscWidth和minDiscWidth的值分別用來確定最大盤子的寬度和最小盤子的寬度,discHeight的值確定每個盤子的高度。
(5)pointA、pointB和pointC都是TowerPoint型數組,三個數組的長度與盤子數目相同,即都是amountOfDisc。pointA、pointB和pointC單元都是TowerPoint創建對象,分別用來表示Hannoi塔中三個座上的塔點。A座、B座和C座上的三個塔點分別由pointA、pointB和pointC中的單元來確定。每個座上的三個塔點都是從座頂依次對應數組的相應單元中的TowerPoint對象。例如,A座最上面的塔點是pointA[0],中間的塔點是pointA[1],最下面的塔點是pointA[2]。
(6)handleMouse是HandleMouse類創建的鼠標事件監視器,用來監視disc數組的Disc對象上觸發的鼠標事件。
(7)autoMoveDisc是AutoMoveDisc創建的對話框。通過該對話框可以實現程序自動移動盤子。
2、方法
(1)Tower(char[])是構造方法,負責完成tower容器的初始化。
(2)tower容器調用setAmountOfDisc(int)方法可以設置amountOfDisc的值。
(3)tower容器調用setMaxDiscWidth(int)方法可以設置最大的盤子的大小。
(4) tower容器調用setMinDiscWidth(int)方法可以設置最小的盤子的大小。
(5) tower容器調用setDiscHeight(int)方法可以設置盤子的高度。
(6) tower容器調用putDiscOnTower ()方法可以將盤子放置在Hannoi塔的A座上,即在pointA指定的塔點上放置disc數組的成員。
(7) tower容器調用getAutoMoveDisc ()方法返回其中的AutoMoveDisc對象:autoMoveDisc。tower是HannoiWindow窗口中的成員,當用戶單擊HannoiWindow窗口中的autoButton按鈕時,窗口中的actionPerformed(ActionEvent)方法將被執行,該方法所進行的操作是讓tower對象返回其中的AutoMoveDisc對象,該對象是一個對話框,用戶可以通過該對話框讓程序自動地移動盤子。
(8) tower容器調用removeDisk ()方法可以移調tower容器中的盤子。
(9) tower容器調用paintComponent (Graphics)方法繪制出塔點的位置和必要的視圖。
5
篇三:JAVA漢諾塔圖解
JAVA漢諾塔圖解
一位法國數學家曾編寫過一個印度的古老傳說:在世界中心貝拿勒斯(在印度北部)的圣廟里,一塊黃銅板上插著三根寶石針。印度教的主神梵天在創造世界的時候,在其中一根針上從下到上地穿好了由大到小的64片金片,這就是所謂的漢諾塔。不論白天黑夜,總有一個僧侶在按照下面的法則移動這些金片:一次只移動一片,不管在哪根針上,小片必須在大片上面。僧侶們預言,當所有的金片都從梵天穿好的那根針上移到另外一根針上時,世界就將在一聲霹靂中消滅,而梵塔、廟宇和眾生也都將同歸于盡。
不管這個傳說的可信度有多大,如果考慮一下把64片金片,由一根針上移到另一根針上,并且始終保持上小下大的順序。這需要多少次移動呢?這里需要遞歸的方法。假設有n片,移動次數是f(n).顯然f(1)=1,f(2)=3,f(3)=7,且f(k+1)=2*f(k)+1。此后不難證明f(n)=2^n-1。n=64時,
f(64)= 2^64-1=18446744073709551615
假如每秒鐘一次,共需多長時間呢?一個平年365天有 31536000 秒,閏年366天有31622400秒,平均每年31556952秒,計算一下,
18446744073709551615/31556952=年
這表明移完這些金片需要5845億年以上,而地球存在至今不過45億年,太陽系的預期壽命據說也就是數百億年。真的過了5845億年,不說太陽系和銀河系,至少地球上的一切生命,連同梵塔、廟宇等,都早已經灰飛煙滅。
漢諾塔問題, 算法分析如下,設A上有n個盤子。
如果n=1,則將圓盤從A直接移動到C。
如果n=2,則:
(1)將A上的n-1(等于1)個圓盤移到B上;
(2)再將A上的一個圓盤移到C上;
(3)最后將B上的n-1(等于1)個圓盤移到C上。
如果n=3,則:
A)將A上的n-1(等于2,令其為n`)個圓盤移到B(借助于C),步驟如下:
(1)將A上的n`-1(等于1)個圓盤移到C上。
(2)將A上的一個圓盤移到B。
(3)將C上的n`-1(等于1)個圓盤移到B。
B)將A上的一個圓盤移到C。
C)將B上的n-1(等于2,令其為n`)個圓盤移到C(借助A),步驟如下:
(1)將B上的n`-1(等于1)個圓盤移到A。
(2)將B上的一個盤子移到C。
(3)將A上的n`-(轉載于: 小 龍文檔 網:java,漢諾塔,課程設計,心得體會)1(等于1)個圓盤移到C。到此,完成了三個圓盤的移動過程。
從上面分析可以看出,當n大于等于2時, 移動的過程可分解為三個步驟:第一步 把A上的n-1個圓盤移到B上;第二步 把A上的一個圓盤移到C上;第三步 把
B上的n-1個圓盤移到C上;其中第一步和第三步是類同的。 當n=3時,第一步和第三步又分解為類同的三步,即把n`-1個圓盤從一個針移到另一個針上,這里的n`=n-1。
JAVA 源代碼
import ;
import ;
public class Hanoi
{
static int[] a;
static int[] b;
static int[] c;
static int num;
static char A="A";
static char B="B";
static char C="C";
public static int get()
{
("歡迎使用漢諾塔游戲圖解,請輸入漢諾塔層數"); Scanner scanner = new Scanner(); //讀入語句
num= ();
("\n");return num;
}
public static void array(int n) //初始化數組,“三根柱子”,三個數組,ABC {a= new int[n];
b= new int[n];
c= new int[n];
for(int i=0;i {
a[i]=i+1;
}
(b,0); //數組B,C填滿0,表示空柱子
(c,0);
}
//移動圓盤,根據移動方向,判斷變化數組的序號 public static int left(int[] s,int n){ int c = 0; for(int i=0;i=0;i--)if (s[i]==0) { c=i; break; } return c; }//漢諾塔圓盤移動主要實現算法 public static void run(int[]x,int[]y,int[]z,int n,char X,char Y,char Z) { if (n==1) { z[right(z,num)]=x[left(x,num)]; x[left(x,num)]=0; print(a,b,c,num); ( X+" >> "+Z ); ("\n"); } else if(n!=1) {run(x,z,y,n-1,X,Z,Y);z[right(z,num)]=x[left(x,num)];x[left(x,num)]=0;print(a,b,c,num);( X+" >> "+Z );("\n");
} } //打印出“柱子”,“圓盤”,移動方向
public static void print(int[]a,int[]b,int[]c,int n) { for(int i=0;i {
(a[i]+" "+b[i]+"}
("A"+" "+"B"+" }
public static void main(String[] args)
{
array(get());
print(a,b,c,num);
("\n");int cnt;
cnt=(int)(2,num)-1; //輸出移動次數("需要移動"+cnt+"次,如下圖:");("\n");
run(a,b,c,num,A,B,C);
}
}
"+c[i]); "+"C");




