java汉诺塔课程设计心得体会.docx
《java汉诺塔课程设计心得体会.docx》由会员分享,可在线阅读,更多相关《java汉诺塔课程设计心得体会.docx(15页珍藏版)》请在冰豆网上搜索。
java汉诺塔课程设计心得体会
java汉诺塔课程设计心得体会
篇一:
汉诺塔模拟程序-课程设计报告
合肥学院
计算机科学与技术系
课程设计任务书
2011~2012学年第一学期
课
专
学
姓
指导教业班程级号名师JAVA语言课程设计汉诺塔模拟程序08网络工程班0804031034Xx金莹郭昌建课程设计名称
2011年9月
目录
目录................................................................................................................................................................2
摘要:
..................................................................................................................................................................3
关键词:
..............................................................................................................................................................3
1、需求分析........................................................................................................................................................3
课程设计目的......................................................................................................................................3
课程设计名称及内容..........................................................................................................................3
任务和要求..........................................................................................................................................3
设计方案提示......................................................................................................................................4
相关背景...............................................................................................................................................4
来源............................................................................................................................................4
传说............................................................................................................................................4
2、设计部分........................................................................................................................................................5
设计思想..............................................................................................................................................5
汉诺塔的演示............................................................................................................................5
算法分析....................................................................................................................................5
程序流程图................................................................................................................................6
算法分析图解............................................................................................................................7
功能内容设计......................................................................................................................................8
程序实现总体功能....................................................................................................................8
具体功能设计..........................................................................................................................9
详细设计............................................................................................................................................10
3、调试及测试..................................................................................................................................................14
调试过程中遇到的主要问题集解决方法........................................................................................14
对设计和编码的回顾讨论和分析....................................................................................................14
4、经验和体会..................................................................................................................................................15
5、附录:
..........................................................................................................................................................16
主要源程序................................................................................................................................................16
摘要:
本文对经典的“汉诺塔”问题进行了详细的分析,给出了实现的算法,并用JAVA实现。
通过该问题的JAVA实现,可使清晰地观测到解决问题的全过程。
关键词:
汉诺塔;算法;递归;JAVA
1、需求分析
课程设计目的
通过课程设计,学生在下述各方面的能力应该得到锻炼:
进一步巩固、加深学生所学专业课程《JAVA语言教程》的基本理论知识,理论联系实际,进一步培养学生综合分析问题,解决问题的能力。
全面考核学生所掌握的基本理论知识及其实际业务能力,从而达到提高学生素质的最终目的。
利用所学知识,开发小型应用系统,掌握运用JAVA语言编写调试应用系统程序,训练独立开发应用系统,进行数据处理的综合能力。
对于给定的设计题目,如何进行分析,理清思路,并给出相应的数学模型。
熟练掌握JAVA语言的GUI设计、线程技术,灵活运用各种类库。
课程设计名称及内容
课程设计名称:
汉诺塔模拟程序
课程设计内容:
设计一个模拟程序,图形化地展现汉诺塔的求解过程
任务和要求
1.学习数据结构课程中关于汉诺塔的知识和算法。
2.设计图形界面,画出3个柱子和若干个大小不一的圆盘,圆盘数量可人工设定。
3.当点击“开始”按钮后,系统自动展现圆盘的移动过程,一秒移动一次。
设计方案提示
利用线程控制每次移动的时间间隔
相关背景
来源
汉诺塔是源自印度神话里的玩具。
大梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按大小顺序摞着64片黄金圆盘。
大梵天命令婆罗门把圆盘从下面开始按大小顺序重新摆放在另一根柱子上。
并且规定,在小圆盘上不能放大圆盘,在三根柱子之间一次只能移动一个圆盘。
传说
在印度,有这么一个古老的传说:
在世界中心贝拿勒斯(在印度北部)的圣庙里,一块黄铜板上插着三根宝石针。
印度教的主神梵天在创造世界的时候,在其中一根针上从下到上地穿好了由大到小的64片金片,这就是所谓的汉诺塔。
不论白天黑夜,总有一个僧侣在按照下面的法则移动这些金片:
一次只移动一片,不管在哪根针上,小片必须在大片上面。
僧侣们预言,当所有的金片都从梵天穿好的那根针上移到另外一根针上时,世界就将在一声霹雳中消灭,而梵塔、庙宇和众生也都将同归于尽。
不管这个传说的可信度有多大,如果考虑一下把64片金片,由一根针上移到另一根针上,并且始终保持上小下大的顺序。
这需要多少次移动呢?
这里需要递归的方法。
假设有n片,移动次数是f.显然f=1,f=3,f=7,且f=2*f+1。
此后不难证明f=2
-1。
n=64时,f=2@-1=184********709551615假如每秒钟一次,共需多长时间呢?
一个平年365天有31536000秒,闰年366天有31622400秒,平均每年31556952秒,计算一下,
18446744073709551615/31556952=年,这表明移完这些金片需要5845亿年以上,而地球存在至今不过45亿年,太阳系的预期寿命据说也就是数百亿年。
真的过了5845亿年,不说太阳系和银河系,至少地球上的一切生命,连同梵塔、庙宇等,都早已经灰飞烟灭。
2、设计部分
设计思想
本程序的主要思想是图形与多线程处理,熟悉图形、图像的使用方法,理解计算机动画的原理和java的多线程处理机制,以及Java语言的GUI设计。
汉诺塔的演示
1、柱子和盘子可以用图形界面里的直线和矩形模拟。
2、矩形(即盘子)的大小可以通过循环控制,这样可以让盘子看上去有层次感。
3、盘子移动后构造一个重绘方法来擦去旧的盘子
4、盘子的移动时间通过线程来控制
算法分析
如果n=1,则将圆盘从A直接移动到C。
如果n=2,则:
将A上的n-1(等于1)个圆盘移到B上;
再将A上的一个圆盘移到C上;
最后将B上的n-1(等于1)个圆盘移到C上。
如果n=3,则:
A)将A上的n-1(等于2,令其为n`)个圆盘移到B(借助于C),步骤如下:
将A上的n`-1(等于1)个圆盘移到C上。
2)将A上的一个圆盘移到B。
将C上的n`-1(等于1)个圆盘移到B。
B)将A上的一个圆盘移到C。
C)将B上的n-1(等于2,令其为n`)个圆盘移到C(借助A),步骤如下:
将B上的n`-1(等于1)个圆盘移到A。
将B上的一个盘子移到C。
将A上的n`-1(等于1)个圆盘移到C。
到此,完成了三个圆盘的移动过程。
从上面分析可以看出,当n大于等于2时,移动的过程可分解为三个步骤:
第一步把A上的n-1个圆盘移到B上;第二步把A上的一个圆盘移到C上;第三步把B上的n-1
篇二:
JAVA汉诺塔图解
JAVA汉诺塔图解
一位法国数学家曾编写过一个印度的古老传说:
在世界中心贝拿勒斯(在印度北部)的圣庙里,一块黄铜板上插着三根宝石针。
印度教的主神梵天在创造世界的时候,在其中一根针上从下到上地穿好了由大到小的64片金片,这就是所谓的汉诺塔。
不论白天黑夜,总有一个僧侣在按照下面的法则移动这些金片:
一次只移动一片,不管在哪根针上,小片必须在大片上面。
僧侣们预言,当所有的金片都从梵天穿好的那根针上移到另外一根针上时,世界就将在一声霹雳中消灭,而梵塔、庙宇和众生也都将同归于尽。
不管这个传说的可信度有多大,如果考虑一下把64片金片,由一根针上移到另一根针上,并且始终保持上小下大的顺序。
这需要多少次移动呢?
这里需要递归的方法。
假设有n片,移动次数是f.显然f=1,f=3,f=7,且f+1。
此后不难证明f=2
-1。
n=64时,
f(64)=2@-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`-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;
publicclassHanoi
{
staticinta;
staticintb;
staticintc;
staticintnum;
staticcharA=‘A’;
staticcharB=‘B’;
staticcharC=‘C’;
publicstaticintget
{
;Scannerscanner=newScanner;//读入语句
num=;
;returnnum;
}
publicstaticvoidarray//初始化数组,“三根柱子”,三个数组,ABC{a=newint[n];
b=newint[n];
c=newint[n];
for//数组A,由1到n,代表n层
{
a[i]=i+1;
}
;//数组B,C填满0,表示空柱子
;
}
//移动圆盘,根据移动方向,判断变化数组的序号publicstaticintleft{intc=0;forif{c=i;break;}returnc;}publicstaticintright{intc=0;forif{c=i;break;}returnc;}//汉诺塔圆盘移动主要实现算法publicstaticvoidrun{if{z[right]=x[left];x[left]=0;print;;;}elseif{run;z[right]=x[left];x[left]=0;print;;;
}}//打印出“柱子”,“圆盘”,移动方向
publicstaticvoidprint{for
{
{
array);
print;
;intcnt;
cnt=-1;//输出移动次数;;
run;
}
}
”+c[i]);“+”C”);
篇三:
Hannoi塔java课程设计
文献综述
题
学院
专
班
姓
目:
Hannoi塔游戏和其java名称:
电子与信息工程学院业:
计算机科学与技术级:
计科12-3名:
12401010323
定稿日期:
2015年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类