




已阅读5页,还剩22页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
-精选公文范文-java汉诺塔课程设计心得体会 篇一:汉诺塔模拟程序-课程设计报告 合肥学院 计算机科学与技术系 课程设计任务书 20112012学年第一学期 课 专 学 姓 指导教业班程 级 号 名 师 JAVA语言课程设计 汉诺塔模拟程序 08网络工程班 Xx 金莹 郭昌建课程设计名称 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=假如每秒钟一次,共需多长时间呢?一个平年365天有 秒,闰年366天有 秒,平均每年秒,计算一下, /=年,这表明移完这些金片需要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= 假如每秒钟一次,共需多长时间呢?一个平年365天有 秒,闰年366天有秒,平均每年秒,计算一下, /=年 这表明移完这些金片需要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 ; 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= ; ;return num; public static void array /初始化数组,“三根柱子”,三个数组,ABC a= new intn; b= new intn; c= new intn; for /数组A,由1到n,代表n层 ai=i+1; ; /数组B,C填满0,表示空柱子 ; /移动圆盘,根据移动方向,判断变化数组的序号 public static int left int c = 0; forif c=i; break; return c; public static int right int c = 0; forif c=i; break; return c; /汉诺塔圆盘移动主要实现算法 public static void run if zright=xleft; xleft=0; print; ; ; else if run;zright=xleft;xleft=0;print; /打印出“柱子”,“圆盘”,移动方向 public static void print for array); print; ;int cnt; cnt=-1; /输出移动次数; run; ”+ci); “+”C”);篇三:Hannoi塔java课程设计 文 献 综 述 题 学院 专 班 姓目:Hannoi塔游戏和其java名称: 电子与信息工程学院业: 计算机科学与技术级: 计科12-3 名: 定稿日期: 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类的主要成员的作用将在后面的详细设计中阐述。 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、成员变量 amountOfDisc是int型数据。amountOfDisc值用来确定tower对象中盘子的数目,即确定tower对象中Disc类型数组disc的长度。 disc是Disc型数组,该数组的长度由amountOfDisc值来确定。Disc数组的每个单元中存放一个Disc对象,依次表明tower对象中有怎样多的盘子。 towerName是char型数组,长度为3,其三个单元的默认取值依次是A、B和C。towerName是数组的单元的值用来确定tower中三个座的名字。 maxDiscWidth和minDiscWidth的值分别用来确定最大盘子的宽度和最小盘子的宽度,discHeight的值确定每个盘子的高度。 pointA、pointB和pointC都是TowerPoint型数组,三个数组的长度与盘子数目相同,即都是amountOfDisc。pointA、pointB和pointC单元都是TowerPoint创建对象,分别用来表示Hannoi塔中三个座上的塔点。A座、B座和C座上的三个塔点分别由pointA、pointB和pointC中的单元来确定。每个座上的三个塔点都是从座顶依次对应数组的相应单元中的TowerPoint对象。例如,A座最上面的塔点是pointA0,中间的塔点
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 音乐艺术概论课件
- 艺术剪贴手工课件
- 企业职业卫生培训
- 培训财税知识简报课件
- 口罩旧物改造课件
- 培训课件个人简介
- 2025年度新能源物流安全责任与绿色运输合作协议
- 2025年度知名餐饮企业品牌形象合作及全渠道营销推广服务合同
- 2025年度企业年鉴编纂及宣传册创意设计合同
- 2025年环保产业专用设备节能改造采购合同模板
- 建筑公司分包合同管理办法
- 2025至2030苏打水行业发展趋势分析与未来投资战略咨询研究报告
- 2025年秋季学期德育工作计划:向下扎根向上开花
- 2025-2030中国家政服务行业信用体系建设与服务质量监管报告
- 2025年安徽省普通高中学业水平选择性考试(物理)科目高考真题+(答案解析版)
- 2025年成都东部集团有限公司及下属企业招聘考试笔试试卷【附答案】
- 各分项工程质量保证措施
- 国税编制管理办法
- 特种畜禽管理办法
- 混凝土外加剂检测原始记录表
- GB/T 15670-1995农药登记毒理学试验方法
评论
0/150
提交评论