《Java课设报告--公倍数.docx》由会员分享,可在线阅读,更多相关《Java课设报告--公倍数.docx(11页珍藏版)》请在课桌文档上搜索。
1、第1章课题概述11.1 课题的目的11.2 .1输出最小公倍数的要求11.2.2程序实现的功能要求1第2章概要设计22.1 整个程序的模块结构及流程22.2 数字存储所用的方法2第3章程序功能的实现33.1最小公倍数的计算方法33.2图形界面的实现3第4章调试及发现问题的解决7第5章程序测试及分析8第6章总结9参考文献10第1章课题概述本次课程设计的题目是输入一个数n,求出1到n这n个数的最小公倍数。1.1 课题的目的对于求公倍数,这是一个很久远的问题,而最开始的两个数求公倍数,到后面的N个数求公倍数,其实都是对数的运用。在生活中,人们一般多求于两个数的公倍数,而对于给定一个数,求出这个数到1
2、的最小公倍数并不多,主要是由于人们计算方法多为笔算,并且一次只能计算两个数的公倍数,不能求出多个数的公倍数,很不方便。而此次我设计的求公倍数的程序就是利用辗转相除法为基础,来计算给定一个数求出这个数到1的公倍数。并且计算时由于涉及的数已经有几十位了,不能采用基本数据类型,所以可以通过其他例如字符串来表示这些大整数。而通过计算机程序实现这个功能,比使用传统的笔算更具有实际意义更简介1.2 .1输出最小公倍数的要求(1)程序运行后弹出一个界面框,有一个文本框提示用户输入一个“正整数二当输入为非正整数事,输出的数字均为初始值“1”(2)输入成功后可以点确定或者直接回车键查看结果。(3)确定之后“公倍
3、数”旁边的文本框会直接显示出1到这个数的最小公倍数。1.2.2程序实现的功能要求(1)由于求公倍数,可能会涉及几十位的大整数,而通常所用的int型和long型的长度都不能满足大整数的存储,所以我采用字符串的形式来储存大整数。(2)用户输入的数必须为正整数,输入的非正数得到的结果为默认值1。第2章概要设计2.1 整个程序的模块结构及流程根据课题要求,整个程序按功能可划分为输入,确定,显示,退出四大模块。并且当输入不同的数字时只需要删除之前输入的数字,再重新输入需要的数字,就可了。程序各功能模块的划分,及主要流程如图2-1所示。图2-1整个程序各功能模块间的流程2.2 数字存储所用的方法当用户输入
4、一个正整数时,实际上储存的时候是用的字符串的形式储存,计算的时候,当用户输入的数字在计算过程中计算出的数字若是太大,就会超出基本数据类型的储存范围,从而使计算造成错误,所以就将其中涉及到的数字全都转换成字符串的类型进行储存和运算,从而将计算上和储存上造成的错误消失。第3章程序功能的实现3.1 最小公倍数的计算方法首先从第一个数和第二个数计算,求出这两个数的最小公倍数,之后有这个最小公倍数与第三个数计算,求出第二个最小公倍数,然后由第二个最小公倍数与第四个数计算求出第三个最小公倍数通过递归的思想,就能求出1到n这n个数的最小公倍数。publicstaticBiglntegergetCommon(
5、BigIntegerm,Biglntegern,inti)if(iA+1)return11;)BigIntegerM=m.multiply(n);求出In和n的乘积BigIntegerr=n.remainder(11D;求出n除以m的余数while(r.doubleValueO!=0)将余数r转换成double类型进行判断是否为0n=m:m=r;r=n.remainder(m);/n/mreturngetCommon,divide(m),newBigIntegerd+),i=i+1);publicvoidactionPerformed(ActionEvente)if(e.getSource()
6、=jbl)k-Integer.par57Z(jtf.getText();BigIntegerbi=newBigInteger(T);jtf2.seUexl(getCommon(bitbi,1).toString();)elseif(e.getSourceO=jb2)System,exitW);)3.2 图形界面的实现整个窗口运行时最先出现在整个桌面面板的最顶层。然后窗口实现的代码如下:privatestaticfinallongserialVersionUID-IL;JButtonjbl,jb2;JTextFieldjtf,jtf2;CommonOSUPer(公倍数);Containerc=t
7、his.getContentPaneO;setBounds(400,225,500,300);窗口在屏幕上的位置以及窗口的大小JPaneljpl=newJPanel0;jpl.SetLayout(newFlowLayout(FlowLayout.RIGHT,30t8);jbl=newJBUttOn(确定);jb2=newJBUtton(退出);jbl.addActionListener(this);jb2.addActionListener(this);jpl.add(jbl);jpl.add(jb2);JPaneljp2=newJPanel();jp2.SetLayout(newGridLa
8、yout(2,1);JPaneljp3=newJPanel();jp3.SetLayout(newFlowLayout(FlowLayout.CENTER,30,8);JPaneljp4=newJPanel();jp4.SetLayout(newFlowLayout(FlowLayout.CENTER,30,8);JLabeljll=newJLabel(数字;JLabeljl2=newJLabe1(公倍数:”);jtf=newJTextField(三);/jtf.addKeyListcner(newKeyAdapter()使用的是KeydaPter实现的回车出结果功能/ / / / /publ
9、icvoidkeyPressed(KeyEventarg)if(arg.getKcyCode()=KcyEvent.VKENTER)k=Integer,parselnt(jtf.gctTcxt();BigIntegerbi_=newBigInteger(T);jtf2.sctTcxt(gotCommon(bi_,bi_,1).toString();)/)/);jtf.addKeyListoner(newKeyListcnerO而这使用的是KCyLiStCnCr实现的回车出结果publicvoidkeyPressed(KeyEventarg)if(arg.getKeyCode()=KeyEven
10、t.VK_ENTER)k=Integer,parselntjti.gctText();BigIntegerbi=newBigInteger(1);jtf2.sctText(bi,bi,1).toString();QOverridepublicvoidkeyReleased(KeyEventarg)/TODOAuto-generatedmethodstub)0VerridepublicvoidkeyTyped(KeyEventarg)/TODOAuto-generatedmethodstub/由于这两个可以不用实现它,所以空实现。);jtf2=newJTextField(SO);jtf2.Set
11、Eclitable(false);jp3.add(jll);jp3.add(jtf);jp4.add(jl2);jp4.add(jtf2);jp2.add(jp3);jp2.add(jp4);c. add(jpl,BorderLayout.SOUTH);d. add(jp2,BorderLayout.CENTER);e. add(newJLabel(公倍数,JLabel.6EV7三,BorderLayout.NORTH);setDefau1tCloseOperation(JFramc.EXIT_ON_CLOSE);SetVisible(true);)图3.1程序主界面设计L整个界面的排版还是比
12、较匀称,两行文本框均是(30,8)距离与高度。2 .整个文本框离屏幕左端400,离屏幕顶225,使其刚好处于中间。3 .文本框的长宽分别为500,300o在显示公倍数时能够容纳1到100的公倍数。若数字长度超出文本框表面长度可以用鼠标按住左键然后滑动使其能够看到被遮住的部分第4章调试及发现问题的解决虽然在程序的编写过程中遇到了很多问题,在程序调试过程中有很多BUG,并且,但是在自己的上网查资料,询问老师后还是成功的解决了这些难题。1.最开始在储存中间计算结果时算出来的数值始终比实际值小很多,从开始int型到long型试过后都不正确,有时候直接出现负数,并且在比较余数为时始终无法判断。当时就没有
13、想到解决的方法,不知道该用什么方法来储存。后来自己翻书时看到了可以用字符串的形式来储存大整数,并且还可以用字符串的形式比较数字,而且还可以用doubleValue将大整数转换成double型来比较大小。while(r.doubIeValue()!=0)(n=m;m=r;r=n.remainder(m);)或者While(!r.toString().equals(*0*)(n=m;m=r;r=n.remainder(m);/n%m)2.对于如何计算1到n这n个数的最小公倍数时,当时一直只想到的用for循环,并且思考的比较复杂,一直往循环方向钻死角,后来程序编写出来后还是觉的不够直观,于是我想到了
14、用递归来求解最小公倍数,通过不停的调用自己来达到目的。第5章程序测试及分析运行程序,首先显示的是程序主界面,然后根据页面上的按钮与文字提示进行数据的输入,确定,退出。闿公信数图5-1输入数据在数字输入后,点击确定程序就开始运行。周公倍数!D;回里J公倍面一数字:w-公倍数:1182266884102822267511361600确定退出图5-1确定之后最小公倍数的结果运行结果显示在公倍数那一栏,最后点击退出将退出程序。在数字那一栏,可以直接进行更改用户输入的数字方便进行多次运算。第6章总结通过一周的课程设计,终于独立写出了上百行代码的程序,虽然其中有很多问题不懂,但是在老师的帮助下,在自己学会
15、查资料的条件下,我努力的把这些都问题都解决了。更重要的是通过这次实践,加深了我对数据结构学科相关知识的理解。总结起来,主要有以下几点体会:L通过此次课程设计,使我更加扎实的掌握了有关JaVa方面的知识,在设计过程中虽然遇到了一些问题,但经过一次又一次的思考,一遍又一遍的检查终于找出了原因所在,也暴露出了前期我在这方面的知识欠缺和经验不足。实践出真知,通过亲自动手制作,使我们掌握的知识不再是纸上谈兵。回顾起此课程设计,至今我仍感慨颇多,从理论到实践,在这段日子里,可以说得是苦多于甜,但是可以学到很多很多的东西,同时不仅可以巩固了以前所学过的知识,而且学到了很多在书本上所没有学到过的知识。通过这次
16、课程设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。在设计的过程中遇到问题,可以说得是困难重重,但可喜的是最终都得到了解决。2 .良好的编程习惯是学习JaVa最好的态度编写一些比较复杂的程序的时候,一定要像做几何一样,学会独立思考,学会查资料。不能只局限于书本,要多多拓展课外,还有网上资源丰富,也可以最大限度的利用起来3 .对于此次的课程设计,我明白要学好Java,就必须牢牢的掌握其基础知识,就像盖大厦一样,只有根基牢稳了,才能盖的更高,更大,学JaVa也是一样,基础牢实,才能更好的写程序,更少的出现BUG,面对自己不会的不懂的,就要多问问老师与同学,懂得请教和学习才是王道。感谢在此过程中帮助过我的指导老师和各位同学!参考文献1(美)埃克尔著陈昊鹏译.Java编程思想(第四版)M.北京:机械工业出版社,2007.明日科技.JaVa从入门到精通(第三版)M.北京:清华大学出版社,2012.3刘小晶,杜选,朱蓉,杜卫锋.数据结构-JaVa语言描述(第2版)M.北京:清华大学出版社,2015.