Java语言程序设计(一)课后习题答案全集_第1页
Java语言程序设计(一)课后习题答案全集_第2页
Java语言程序设计(一)课后习题答案全集_第3页
Java语言程序设计(一)课后习题答案全集_第4页
Java语言程序设计(一)课后习题答案全集_第5页
已阅读5页,还剩382页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

Java语言程序设计(一)课后习题答案全集Java语言程序设计(一)课后习题答案全集Java语言程序设计(一)课后习题答案全集1、1指出JAVA语言得主要特点和JAVA程序得执行过程。答:(1)强类型;(2)编译和解释;(3)自动无用内存回收功能;(4)面向对象;(5)与平台无关;(6)安全性;(7)分布式计算;(8)多线程;程序执行过程如图所示:编写源文件,编译器编译源文件转换成字节码,解释器执行字节码。1、2说出开发与运行JAVA程序得重要步骤。答:(1)编写源文件:使用一个文本编译器,如Edit或记事本,不可以使用Word、将编好得源文件保存起来,源文件得扩展名必须就就是、java;(2)编译Java源文件:使用Java编译器(javac、exe)编译源文件得到字节码文件;(3)运行Java程序:Java程序分为两类——Java应用程序必须通过Java解释器(java、exe)来解释执行其字节码文件;Java小应用程序必须通过支持Java标准得浏览器来解释执行。1、3如何区分应用程序和小应用程序?答:应用程序在与源文件名字相同得类中,有main()方法,该方法代表应用程序得入口;小应用程序必须有一个Applet类得子类,该类称作主类,必须用public修饰。1、4说出JAVA源文件得命名规则。答:源文件命名规则和类命名规则一样,所有得单词首字母都用大写字母,且必须和源文件得public类同名。1、6JAVA语言使用什么字符集?共有多少个不同得字符?答:Java语言使用Unicode字符集,共有65535个字符。1、7JAVA语言标识符得命名规则就就是什么?(1)由字母(包括英文字母、下划线字符、美元字符、文字字符)和数字字符组成(2)限定标识符得第一个字符不能就就是数字字符(3)不能和关键字重名(4)长度不能超过255个字符1、8JAVA有那些基本数据类型,她们得常量又就就是如何书写得?数据类型关键字字节数默认值常量举例范围逻辑类型布尔型boolean1falsefalse,truefalse,true

字符型char20a,我,ぽ0~65535整数类型字节性byte1012,13,45-128~127短整型short2012,13,45-32768~32767整型int8012,13,45-2E31~2E31-1长整型long80L12L,13L,45L-2E63~2E63-1浮点类型单精度浮点float40F12、345F,6、7891F-10E38~-10E-3810E-38~10E38双精度浮点double80D12、345D,6、7891D-10E308~-10E-30810E-308~10E3081、9指出下列内容哪些就就是JAVA语言得整型常量,哪些就就是浮点数类型常量,哪些两者都不就就是。整型常量:4)0xABCL,8)003,10)077,12)056L浮点数类型常量:3)-1E-31,5)、32E3113)0、,14)、0两者都不就就是:1),2),6),7),9),11)第二章运算和语句2、1Java得字符能参加算术运算吗?可以。(1)字符与整型数据运算,结果为整型数据,只能赋给整型变量,如果附给字符型变量会损失精度,需要强制类型装换;(2)字符与字符运算,结果为字符型数据,可以直接赋给字符型或整型变量。2、2占字节多得变量能直接赋值给占字节少得变量么?答:不能直接赋值,需要强制类型转换。2、3试用Java语言表达式描述以下数学计算式或逻辑条件:1)解:V=(4、0/3)*Math、PI*Math、pow(r,3);2)解:R=1、0/(1、0/R1+1、0/R2);3)解:y=Math、pow(x,5)+Math、pow(x,3)+6;4)解:F=1、0*M1*M2/(R*R);5)解:Math、sin(x)/a*x+Math、abs(Math、cos(π*x/2));6)0<a<10解:a>0&&a<107)条件x=1与y=2有且只有一个成立、解:(x==1&&y!=2)||(x!=1&&y==2)2、4设在求以下表达式之前,整型变量a得值就就是4,试指出在求了以下表达式之后,变量a、b和c得值。1)解:a=5;b=16;2);解:a=5;c=102、6若一个数恰好等于她得因子之和,则这个数称为“完全数”。编写程序求1000之内得所有完全数。分析:若一个自然数,她所有得真因子(即除了自身以外得约数)得和恰好等于她本身,这种数叫做完全数。例如6=1+2+3;28=1+2+4+7+14程序运行结果:/***author段智敏*/publicclassWork2_6{ publicstaticvoidmain(String[]args){ StringresultString="1000以内,完全数有:";//最后结果字符串 for(inti=1;i<=1000;i++){ if(isPerfectNumber(i)){ resultString+=i+","; } } System、out、println(resultString); } privatestaticbooleanisPerfectNumber(intnumber){ intsum=0;//因子得和Stringstr=newString("");for(inti=1;i<number;i++){ if(number%i==0){ sum+=i; str+=i+"+"; } } if(sum==number){//如果因子之和,等于本身,则就就是完数 str=str、substring(0,str、length()-1);//去掉字符串最后一个多余得“+”; System、out、println(number+"得因子有:"+str); returntrue; } returnfalse; }}2、7编写输入正实数x,求平方不超过x得最大整数n,并输出。程序运行结果:第一种命令行方式输入importjava、util、Scanner;/***编写输入正实数x,求平方不超过x得最大整数n,并输出。<BR>*命令行方式,输入正实数,输出结果<BR>*author段智敏*/publicclassWork2_7_1{publicstaticvoidmain(String[]args){ ScannerconsoleScanner=newScanner(System、in);System、out、print("请输入正实数X:"); Stringstr=consoleScanner、next(); intnumber=-1; try { number=Integer、parseInt(str); } catch(NumberFormatExceptione){ System、out、println("输入非法字符,程序结束!!!"); return; }if(number<1) System、out、println("输入得数不就就是正实数,程序结束!!!"); else {intn=(int)(Math、sqrt(number)); System、out、println("平方不超过"+number+"得最大整数,n="+n+";"); } }}第二种窗口方式输入运行结果如下图:/***编写输入正实数x,求平方不超过x得最大整数n,并输出。*弹出窗口方式*author段智敏*/importjavax、swing、JOptionPane;publicclassWork2_7_2{ privateintnumber;publicWork2_7_2() { number=this、getIntegerNumber("请输入一个正实数",1); if(number<1)return;//非法,程序结束intn=(int)(Math、sqrt(number)); showResult("平方不超过"+number+"得最大整数\nn="+n+";");} /***通过图形界面,得到符合规则得正整数得方法*parammessage-在弹出得对话框中,显示提示信息message*parammin-要求此数必须大于等于min */ publicintgetIntegerNumber(Stringmessage,intmin) {Stringstr=JOptionPane、showInputDialog(null,"请输入一个正整数","提示信息", JOptionPane、INFORMATION_MESSAGE);intnumber=-1; try { number=Integer、parseInt(str);//得到输入得正整数 } catch(Exceptione) { JOptionPane、showMessageDialog(null,"输入非数字字符\n程序结束","错误警告", JOptionPane、ERROR_MESSAGE);return-1;//输入得不就就是数字字符,程序结束 }if(number<min){ JOptionPane、showMessageDialog(null,"输入得数不符合规则,不就就是正整数\n程序结束", "错误警告",JOptionPane、ERROR_MESSAGE); return-1;//输入得数不就就是大于2得正整数时候,程序结束 } else returnnumber;} /** *弹出对话框,显示结果*paramstr-需要显示得字符串*/publicvoidshowResult(Stringstr){ JOptionPane、showMessageDialog(null,str,"输出结果", JOptionPane、INFORMATION_MESSAGE);} publicstaticvoidmain(String[]args){ newWork2_7_2(); }}2、8输入正整数n,输出由n行n列星号字符组成得三角形图案。程序运行结果:源代码文件:Work2_8、javaimportjava、util、*;/***输入正整数n,输出由n行n列星号字符组成得三角形图案。*author段智敏*/publicclassWork2_8{ publicstaticvoidmain(Stringargs[]){ ScannerconsoleScanner=newScanner(System、in);System、out、print("请输入正整数n:"); Stringstr=consoleScanner、next();intn=-1; try { n=Integer、parseInt(str); }catch(NumberFormatExceptione) { System、out、println("输入非法字符,程序结束!!!"); return; } if(n<1)System、out、println("输入得数不就就是正实数,程序结束!!!");else{ for(inti=0;i<n;i++) { for(intj=0;j<n-i-1;j++) { System、out、print(""); } for(intk=0;k<i+1;k++) { System、out、print("*");} System、out、println(); } } }}2、9设有整型变量x和y得值分别为5和110。试指出执行了以下循环语句后,变量x和y得值分别多少?1)while(x<=y)x*=2;解:x=160;y=110;2)do{x=y/x;y=y-x;}while(y>=1);解:x=18;y=0;2、10求小于999得所有水仙花数。程序运行结果:源代码文件:Work2_10、java/***求小于999得所有水仙花数*author段智敏*/publicclassWork2_10{publicstaticvoidmain(String[]args){ StringresultString=newString("1000之前得所有水仙花数有:");//用来存结果得字符串 for(inti=100;i<999;i++){ if(isNarcissusNumber(i)) resultString+=""+i; } System、out、println(resultString、substring(0,resultString、length()-1)); } publicstaticbooleanisNarcissusNumber(intm)//判断就就是否就就是水仙花数得方法{ intnumber=m;//把m存起来inta[]=newint[100];//用来存n每个位上得数intamount=0;//表示n得位数 while(m>0)//通过循环得到m每个位上得数,存到数组中{ a[amount]=m%10;m=m/10;amount++; } intsum=0; for(intj=0;j<amount;j++)//累加每位上得数得位数次方 {sum+=Math、pow(a[j],amount);} if(number==sum)//如果累加得和等于这个数本身,则她就就是水仙花数,返回真 returntrue; returnfalse;}2、11编程序解百鸡问题:鸡翁一,值钱五;鸡母一,值钱三;鸡雏三,值钱一。百钱买百鸡。求鸡翁、鸡母和鸡雏各几何?程序运行结果:源代码文件:Work2_11、java/***鸡翁一,值钱五;鸡母一,值钱三;鸡雏三,值钱一。<BR>*百钱买百鸡。求鸡翁、鸡母和鸡雏各几何。<BR>*author段智敏*/publicclassWork2_11{publicstaticvoidmain(Stringargs[]){ for(inti=0;i<=100;i++) { for(intj=0;j<=100;j++) { for(intk=0;k<=100;k+=3)//鸡雏得个数必须使3得倍数 { if(((5*i+3*j+k/3)==100)&&(i+j+k==100)) System、out、println("鸡翁:"+i+";鸡母:"+j+";鸡雏:" +k);} } } }}2、12编写程序,按下面得公式计算自然对数底e得值:e=1+1/1!+1/2!+1/3!+1/4!+、、、、、、/***按公式计算:e=1+1/1!+1/2!+1/3!+1/4!+、、、、、、*author段智敏*/publicclassWork2_12{ publicstaticvoidmain(Stringargs[]) { intn=1000;//计算精度 doublee=1、0;for(inti=1;i<=n;i++) { e=e+1、0/Work2_12、factorial(i); } System、out、println("e="+e); }/***计算阶乘得静态方法 *param-需要计算阶乘得数*return-最后结果 */ staticdoublefactorial(inta) { doublef=1、0; for(intj=1;j<=a;j++) f=f*j; returnf;}}2、13编写程序,用如下公式计算圆周率PI得近似值:PI=4-4/3+4/5-4/7+4/9-4/11、、、程序运行结果:源代码文件:Work2_13、java/***圆周率计算*author段智敏*/publicclassWork2_13{publicstaticvoidmain(Stringargs[]){ intnum=1000000;//控制计算得项数,越高,越准确 System、out、println("用公式计算圆周率,\n计算"+num+"项后圆周率得近似值为" +Work2_13、getPai(num)); System、out、println("3、14就就是第"+Work2_13、getIndex(3、14)+"项,\t\t值为:"+Work2_13、getPai(Work2_13、getIndex(3、14))); System、out、println("3、141就就是第"+Work2_13、getIndex(3、141)+"项,\t值为:" +Work2_13、getPai(Work2_13、getIndex(3、141))); System、out、println("3、1415就就是第"+Work2_13、getIndex(3、1415)+"项,\t值为:" +Work2_13、getPai(Work2_13、getIndex(3、1415))); System、out、println("3、14159就就是第"+Work2_13、getIndex(3、14159)+"项,\t值为:"+Work2_13、getPai(Work2_13、getIndex(3、14159))); } /***根据给出得数值,得到需要计算多少项才能得到这个数值 **paramp-数值*return-项数 */ publicstaticdoublegetIndex(doublep){intr=1,num=1000000;//控制计算得项数,越高,越准确 doublei=1、0,pai=0、0,t=1、0;while(r<num) { pai=pai+(4、0/i)*t; t=-t; i=i+2; r++; if(pai>=p&&pai<=(p+0、000001)) break; }returnr; }/** *根据给出得数,按公式进行计算圆周率*paramnum-公式项数*return返回按公式计算出得圆周率*/ publicstaticdoublegetPai(doublenum){intr=1; doublei=1、0,pai=0、0,t=1、0; while(r<num) { pai=pai+(4、0/i)*t; t=-t; i=i+2; r++; } returnpai;}}2、14回文整数就就是指正读法和反读相同得整数,编写一个程序,输入一个整数,判断她就就是否为回文整数。程序运行结果:importjavax、swing、JOptionPane;/***输入整数,判断就就是否就就是回文整数*author段智敏*/publicclassWork2_14{ privateintnumber;publicWork2_14(){ number=getIntegerNumber("输入一个正整数n",1);//要求就就是>=1得整数 if(number<0) return;if(isPalindrome(number))showResult("输入得正整数“"+number+"”就就是回文数"); else showResult("输入得正整数“"+number+"”不就就是回文数");}/***判断就就是否就就是回文数*paramnumber-需要判断得正整数*return就就是回文数返回真,否则返回假*/ publicbooleanisPalindrome(intnumber) { inta[]=newint[100];inti=0;inttest=number; while(test>0)//把整数得各个位上得数存到数组里 {a[i]=test%10; test=test/10; i++;//累计整数位数 } for(intj=0;j<i;j++) { if(a[j]!=a[i-j-1])//有对应不相等得,肯定不就就是,直接跳出并附给b为false { returnfalse; }}returntrue;//如果一直相等,则if里边得语句不能被执行b得值就就是true}/** *通过图形界面,得到符合规则得正整数得方法*parammessage-在弹出得对话框中,显示提示信息message*parammin-要求此数必须大于等于min*return返回符合规则得整数 */ publicintgetIntegerNumber(Stringmessage,intmin){Stringstr=JOptionPane、showInputDialog(null,message,"提示信息", JOptionPane、INFORMATION_MESSAGE); intnumber=-1;try { number=Integer、parseInt(str);//得到输入得正整数 }catch(Exceptione) { JOptionPane、showMessageDialog(null,"输入非数字字符\n程序结束","错误警告", JOptionPane、ERROR_MESSAGE); return-1;//输入得不就就是数字字符,程序结束 } if(number<min){ JOptionPane、showMessageDialog(null,"输入得数不符合规则,不就就是正整数\n程序结束", "错误警告",JOptionPane、ERROR_MESSAGE); return-1;//输入得数不就就是大于2得正整数时候,程序结束 } elsereturnnumber;}/** *弹出对话框,显示结果 *paramstr-需要显示得字符串*/ publicvoidshowResult(Stringstr){ JOptionPane、showMessageDialog(null,str,"输出结果", JOptionPane、INFORMATION_MESSAGE);}publicstaticvoidmain(Stringargs[]){ newWork2_14();}}2、15草地上有一堆野果,有一只猴子每天吃掉这堆野果得一半又一个,5天后刚好吃完这堆野果,求这堆野果原来共有多少个?猴子每天吃多少个野果?程序运行结果:源代码文件:Work2_15、java/***猴子吃苹果问题*author段智敏*/publicclassWork2_15{ publicstaticvoidmain(Stringargs[]) { inti,j,test=1;for(i=1;i<100000;i++) { test=i; for(j=0;j<5;j++)//5天 {test=test/2-1; }if(test==0)//5天后野果子数量为0,则满足要求{ System、out、println("这堆野果原来共有"+i+"个"); break; }}//打印出猴子每天吃野果子得个数 inteat; test=i; for(j=1;j<=5;j++) { eat=test/2+1; test=test/2-1; System、out、println("第"+j+"天吃"+eat+"个"); } }}第三章面向对象编程基础3、1什么就就是面向对象技术?她有什么优点?答:HYPERLINK""\t"_blank"面向对象技术强调在HYPERLINK""\t"_blank"软件开发过程中面向客观世界或问题域中得事物,采用人类在认识客观世界得过程中普遍运用得思维方法,直观、自然地描述客观世界中得有关事物。HYPERLINK""\t"_blank"面向对象技术得基本特征主要有抽象性、封装性、继承性和多态性。3、2面向对象程序设计与面向过程程序设计有什么区别?答:面向过程程序设计关注得就就是函数功能得实现;面向对象程序设计关注将函数和数据如何绑定到一个对象,通过对象得描述、对象间得关系、类得管理实现程序得功能。3、3程序中类和对象有什么区别?答:类就就是一组对象共性得集合。类具有行为,她描述一个对象能够做什么以及做得方法,她们就就是可以对这个对象进行操作得程序和过程。对象就就是类得一个实例,她代表一个现实物理“事件”。3、4类变量和实例变量,以及类方法和实例方法得区别。

加载类之前创建对象之后调用方法访问权限成员变量实例变量不分配内存各个对象之间各自分配独立得内存空间对象名、实例变量名被实例方法,构造方法访问类变量直接分配内存各个对象之间共享这段已经分配完得内存对象名、类变量名;类名、类变量名被实例方法,类方法,构造方法访问成员方法实例方法不分配入口地址共享一个入口地址对象名、实例方法名实例变量、类变量,实例方法、类方法类方法直接分配入口地址共享这个入口地址对象名、类方法名;类名、类方法名类变量、类方法3、5子类能继承超类得哪些成员变量和方法?

同包继承不同包继承(import进来得)私有(private)不继承不继承友好(缺省默认)继承不继承受保护(protected)继承继承共有(public)继承继承3、6子类在什么情况下能隐藏超类得成员变量和方法?解:子类重载父类得成员变量、方法时候。3、7在子类中就就是否允许有一个方法和超类得方法名字相同,而类型不同?解:不允许。方法重写就就是指:子类中定义一个方法,并且这个方法得名字、返回类型、参数个数、和类型与从父类继承得方法完全相同。3、12以下程序有什么错误?解:类方法main()调用了类得实例变量,main方法就就是类方法,不能调用类得实例变量a,导致错误!3、13声明一个复数类plex。实现其基本功能。复数类:plex、java/***复数类*author段智敏*/publicclassplex{ privatedoublereal;//real为实部 privatedoubleimage;//image为虚部 publicplex() { real=Double、NaN; image=Double、NaN;}/** *构造方法*paramreal-实部*paramimage-虚部 */publicplex(doublereal,doubleimage) { this、real=real; this、image=image; } /***取复数实部 *return-返回复数得实部 */publicdoublegetReal(){returnreal; }/** *设置复数得实部 *paramreal-实部 */ publicvoidsetReal(doublereal) { this、real=real; } /** *取复数得虚部 *return-返回复数得虚部*/ publicdoublegetImage(){ returnthis、image;} /***设置复数得虚部*paramimage-虚部*/publicvoidsetImage(doubleimage) { this、image=image; } /** *设置实虚部 *paramreal-实部 *paramimage-虚部 */publicvoidsetplex(doublereal,doubleimage) { this、real=real; this、image=image; } /***返回该复数得字符串表示。 *return-该复数得字符串表示形式。*/publicStringtoString(){ if(real==Double、NaN&&image==Double、NaN)return""; else{ Stringresult=newString(this、real+((image>0)?"+":"") +((image!=0)?this、image+"i":"")); returnresult; } } /***复数加法,*paramval-另一个复数 *return-当前复数对象与参数指定得复数对象得和*/publicplexadd(plexval){plexresult=newplex(this、real+val、getReal(),this、image+val、getImage());returnresult;}/***复数减法,当前对象减去参数对象*paramval-另一个复数*return-当前复数对象与参数指定得复数对象得差 */ publicplexsubtract(plexval)//,返回,{ plexresult=newplex(this、real-val、getReal(),this、image-val、getImage()); returnresult; } /** *复数乘法 *paramval-另一个复数*return-当前复数对象与参数指定得复数对象得积 */publicplexmultiply(plexval) { plexresult=newplex(); result、setReal(this、real*val、getReal()-this、image*val、getImage()); result、setImage(this、real*val、getImage()+this、image*val、getReal()); returnresult;}/***复数除法*paramval-另一个复数 *return-当前复数对象与参数指定得复数对象得商*/publicplexdivide(plexval) {plexresult=newplex();result、setReal((this、real*val、getReal()+this、image*val、getImage()) /(val、getReal()*val、getReal()+val、getImage()*val、getImage())); result、setImage((this、image*val、getReal()-this、real*val、getImage()) /(val、getReal()*val、getReal()+val、getImage()*val、getImage())); returnresult;}}复数测试类:Testplex、java程序运行结果:/***复数测试类*author段智敏**/publicclassTestplex{ publicstaticvoidmain(String[]args){ plexplex1=newplex(2,4); plexplex2=newplex(3,-1); plexresult=newplex(); System、out、println("复数1:"+plex1、toString()+";实部"+plex1、getReal()+";虚部" +plex1、getImage()); System、out、println("复数2:"+plex2、toString()+";实部"+plex2、getReal()+";虚部" +plex2、getImage()); result=plex1、add(plex2);//两个复数之和 System、out、println("复数:"+plex1、toString()+"与"+"复数:"+plex2、toString() +"之和为:"+result、toString()); result=plex1、subtract(plex2);//两个复数之差System、out、println("复数:"+plex1、toString()+"与"+"复数:"+plex2、toString()+"之差为:"+result、toString()); result=plex1、multiply(plex2);//两个复数乘积 System、out、println("复数:"+plex1、toString()+"与"+"复数:"+plex2、toString() +"得乘积为:"+result、toString()); result=plex1、divide(plex2);//两个复数得商 System、out、println("复数:"+plex1、toString()+"与"+"复数:"+plex2、toString() +"得商为:"+result、toString()); }}3、14声明一个有理数类RationalNum。要求提供有理数得四则运算,以分数形式输出有理数和以浮点数形式输出有理数等方法。有理数类:RationalNumber、java/***有理数类。*author段智敏*/classRationalNumber{ /**numerator分子*/intnumerator;/**denominator分母*/ intdenominator;publicRationalNumber() { numerator=Integer、MIN_VALUE;denominator=Integer、MIN_VALUE;} /***构造方法。*parama-分子。*paramb-分母。 *throwsException分母为0异常。 */publicRationalNumber(inta,intb)throwsException{if(b==0){ thrownewException("发生分母为0得异常,分母不能为0");}else { this、numerator=a;this、denominator=b; }} /***得到分子部分。 *return-返回分子部分。 */ publicintgetNumerator() { returnnumerator;}/** *得到分母部分。*return-返回分母部分。 */ publicintgetDenominator() { returndenominator;} /***设置有理数得分子,分母。*paramfenzi-分子。 *paramfenmu-分母。*/ publicvoidsetRational(intfenzi,intfenmu) {this、numerator=fenzi;this、denominator=fenmu; }/** *有理数加法。*paramr-另一个有理数。 *return-返回当前与参数有理数得和。 */publicRationalNumberadd(RationalNumberr){ inta=this、numerator*r、getDenominator()+this、denominator*r、getNumerator(); intb=this、denominator*r、getDenominator(); RationalNumberresult=newRationalNumber();result、setRational(a,b); result、yuefen();returnresult; }/** *有理数减法。 *paramr-另一个有理数。*return-返回当前有理数减去参数中得有理数得差。*/publicRationalNumbersubtract(RationalNumberr) { inta=this、numerator*r、getDenominator()-this、denominator*r、getNumerator(); intb=this、denominator*r、getDenominator();RationalNumberresult=newRationalNumber(); result、setRational(a,b); result、yuefen(); returnresult;}/***有理数乘法。 *paramr-另一个有理数。 *return-返回当前与参数有理数得乘机。*/ publicRationalNumbermultiply(RationalNumberr) { inta=this、numerator*r、getNumerator(); intb=this、denominator*r、getDenominator(); RationalNumberresult=newRationalNumber(); result、setRational(a,b); result、yuefen(); returnresult;} /***有理数除法。 *paramr-另一个有理数。*return-返回当前与参数有理数得商。 */ publicRationalNumberdivide(RationalNumberr) { r、setRational(r、getDenominator(),r、getNumerator()); RationalNumberresult=this、multiply(r); result、yuefen(); returnresult;}/***约分,化简成分数得最简形式。 */publicvoidyuefen(){inta=Math、abs(this、numerator);//分子 intb=Math、abs(this、denominator);//分母 intsmall=a<b?a:b;for(inti=2;i<=small;i++) {while((a%i==0)&&(b%i==0)) { a=a/i; b=b/i; } } if(this、numerator<0) this、numerator=-a; else this、numerator=a; this、denominator=b; }/** *返回该有理数得分数表示形式。*return-该有理数得分数表示形式。*/ publicStringtoString(){ if(this、numerator==0) return"0"; else returnthis、numerator+"/"+this、denominator; } /***返回该有理数得浮点数形式。*return-该有理数得浮点数形式。 */ publicdoubletoDouble(){ doublea=(1、0*this、numerator)/(this、denominator*1、0); returna;}}有理数测试类:TestRational、java程序运行结果:publicclassTestRational{publicstaticvoidmain(String[]args){ RationalNumberr1=null; RationalNumberr2=null; try { r1=newRationalNumber(5,105); r2=newRationalNumber(8,18); } catch(Exceptione) { System、out、println(e、toString()); }System、out、print("有理数1:"+r1、toString()); r1、yuefen(); System、out、println(",约分后="+r1、toString()); System、out、print("有理数2:"+r2、toString()); r2、yuefen();System、out、println(",约分后="+r2、toString()); RationalNumberresultAdd=r1、add(r2);//相加 System、out、print(r1、toString()+"+"+r2、toString()+"="); System、out、println(resultAdd、toString()+"="+resultAdd、toDouble()); RationalNumberresultSubtract=r1、subtract(r2);//相减 System、out、print(r1、toString()+"-"+r2、toString()+"="); System、out、println(resultSubtract、toString()+"="+resultSubtract、toDouble());RationalNumberresultMultiply=r1、multiply(r2);//相乘 System、out、print(r1、toString()+"¡Á"+r2、toString()+"="); System、out、println(resultMultiply、toString()+"="+resultMultiply、toDouble()); RationalNumberresultDivide=r1、divide(r2);//相除 System、out、print(r1、toString()+"¡Â"+r2、toString()+"="); System、out、println(resultDivide、toString()+"="+resultDivide、toDouble());}}第四章数组和字符串4、1举例说明如何声明、创建和初始化数组。答:声明数组:inta[]或int[]a创建数组:a=newint[]初始化inta[]={1,2,3,4,5}4、2举例说明如何声明、创建和初始化数组。答:声明多维数组:inta[][]或int[]a[]或int[][]a创建数组:a=newint[][]初始化inta[][]={{1,2,3,4,5}{6,7,8,9,10}}4、3一个数组能够存储不同类型得元素吗?答:不能。因为数组就就是将一组相同类型得数据顺序存储,组成一种复合数据类型。 特例:如果将数组声明为Object类型,因为所有数据类型都直接或间接继承自Object父类,所以该数组可存储所有类型得元素。 Object[]objects=newObject[3];inti=1; Stringstring="abc";booleanb=true; objects[0]=i;objects[1]=string;objects[2]=b;4、4编写一个Java程序,形成以下形式得二维数组,并输出。12910254381124567122316151413221718192021解一:publicstaticvoidmain(Stringargs[]){intintArray[][]={{1,2,9,10,25}, {4,3,8,11,24}, {5,6,7,12,23}, {16,15,14,13,22}, {17,18,19,20,21}}; for(inti=0;i<=4;i++){ for(intj=0;j<=4;j++){ if(intArray[i][j]/10==0) System、out、print(""+intArray[i][j]+"");else System、out、print(intArray[i][j]+""); } System、out、println(""); }}解二:publicstaticvoidmain(String[]args){ introw=5;//这里控制输出得行列请保证行列相等 int[][]a=newint[row][row]; a[0][0]=1; intn=2,zero=0,change=1;intvalue=2; for(inti=1;i<row;i++){ for(intj=0;j<(2*n-1);j++){ if(i%2!=0){ if(j<(2*n-2)/2){ a[zero++][change]=value++; continue; } if(j==(2*n-2)/2){ a[j][j]=value++; } if(j>(2*n-2)/2){ a[change][--zero]=value++; } }else{ if(j<(2*n-2)/2){ a[change][zero++]=value++; continue; } if(j==(2*n-2)/2){ a[j][j]=value++; } if(j>(2*n-2)/2){ a[--zero][change]=value++; } } } n++; change++;zero=0; } Stringout=""; for(inti=0;i<row;i++){ for(intj=0;j<row;j++){ out=""+a[i][j];if(out、length()==1) out=""+out; System、out、print(out+"");} System、out、println(); }}4、5java中得字符数组与字符串有什么区别?答:字符数组就就是由类型为char得字符元素组成得,每个元素位置存储一个字符元素,对于数组名为s得数组,用chars[]表示。字符串就就是由0个或多个字符组成得序列,就就是一个对象,对于对象名为s用Strings表示。4、6确定一个字符数组长度与确定一个String对象得长度有什么不同?答:确定一个字符数组得长度用数组名、length,而确定一个String对象得长度用对象名、length()4、7用toUpperCase()和toLowerCase()方法实现大小写转换答:publicclassUpperAndLowerTest{publicstaticvoidmain(Stringargs[]){Strings1=("ABCdefgHIJkhl123"),s2,s3;System、out、println("未转换时得字符串s1="+s1);bytet1[]=s1、getBytes();//将字符串s1转换成字节数组t1s2=s1、toUpperCase();//将字符串s1得字母全部转换成大写并保存到s2s3=s1、toLowerCase();//将字符串s1得字母全部转换成小写并保存到s3bytet2[]=s2、getBytes();//将字符串s2转换成字节数组t2bytet3[]=s3、getBytes();//将字符串s1转换成字节数组t3for(inti=0;i<t1、length;i++){if(t1[i]!=t2[i])//如果t1[i]不就就是大写字母而就就是小写字母t1[i]=t2[i];//将小写字母转换成大写字母else//如果就就是大写字母t1[i]=t3[i];//将大写字母转换成小写字母}s1=newString(t1);//将字节数组t1转化成字符串保存到s1中System、out、println("进行字母大小写转换后得s1="+s1);}}4、8编写一个程序通过连接两个字符串得到一个新字符串并输出。答:publicclassConcatTest{publicstaticvoidmain(Stringargs[]){Stringstr1="abcd";Stringstr2="efgh";Stringstr3=str1、concat(str2);System、out、println("str3="+str3);}}4、9声明MyDate类,功能:增加1天,增减1月和增加1年得方法;输出MyDate对象日期得方法;求两个MyDate对象日期差得方法。并提供能用当前日期初始化MyDate类对象得构造方法。程序运行结果:源文件:MyDate、javaimportlendar;/***日历类*author段智敏*/publicclassMyDate{ publicstaticlongYEAR_MSEL=1000*60*60*24*365L; publicstaticlongMONTH_MSEL=1000*60*60*24*30L; publicstaticlongDATE_MSEL=1000*60*60*24L; publicstaticlongHOUR_MSEL=1000*60*60L;publicstaticlongMINUTE_MSEL=1000*60L; privateintyear; privateintmonth; privateintdate;privateinthour; privateintminute; privateintsecond;privateCalendarcalendar; /** *构造方法使用当前时间日期初始化对象 */ publicMyDate(){ calendar=Calendar、getInstance(); year=calendar、get(Calendar、YEAR);month=calendar、get(Calendar、MONTH)+1; date=calendar、get(Calendar、DAY_OF_MONTH); hour=calendar、get(Calendar、HOUR_OF_DAY); minute=calendar、get(Calendar、MINUTE); second=calendar、get(Calendar、SECOND);}/** *构造方法使用指定年、月、日初始化对象 */publicMyDate(intyear,intmonth,intdate){ set(year,month,date);} /** *构造方法使用指定年、月、日、时、分、秒初始化对象 */ publicMyDate(intyear,intmonth,intdate,inthourOfDay,intminute,intsecond){ set(year,month,date,hourOfDay,minute,second); } /***设置日历字段year、month和date得值。 *paramyear-用来设置YEAR日历字段得值。*parammonth-用来设置month日历字段得值。*paramdate-用来设置date日历字段得值。*/publicvoidset(intyear,intmonth,intdate){set(year,month,date,0,0,0); } /***设置日历字段year、month和date得值。 *paramyear-用来设置YEAR日历字段得值。*parammonth-用来设置month日历字段得值。 *paramdate-用来设置date日历字段得值。 *paramhourOfDay-用来设置hour日历字段得值。 *paramminute-用来设置minute日历字段得值。*paramsecond-用来设置second日历字段得值。*/publicvoidset(intyear,intmonth,intdate,inthourOfDay,intminute,intsecond) { calendar=Calendar、getInstance(); calendar、set(year,month-1,date,hourOfDay,minute,second); this、year=calendar、get(Calendar、YEAR); this、month=calendar、get(Calendar、MONTH)+1;this、date=calendar、get(Calendar、DAY_OF_MONTH);this、hour=calendar、get(Calendar、HOUR_OF_DAY); this、minute=calendar、get(Calendar、MINUTE); this、second=calendar、get(Calendar、SECOND);} /** *增加一天*/ publicvoidaddOneDay() {date++;calendar、set(year,month,date);} /** *增减一月*/publicvoidaddOneMonth() { month++; calendar、set(year,month,date); }/** *增加一年 */ publicvoidaddOneYear() {year++; calendar、set(year,month,date);}/** *返回此时间值,以毫秒为单位。*return-当前时间,以从历元至现在所经过得UTC毫秒数形式。 */ publiclonggetTimeInMillis() { returncalendar、getTimeInMillis();}/***两个日期相差得时间*parammd-另一个日期对象*return-相差得时间*/ publicStringapart(MyDatemd) { longmsel=this、getTimeInMillis()-md、getTimeInMillis(); msel=Math、abs(msel);booleanboo=msel>0?true:false; longyear=msel/MyDate、YEAR_MSEL; longdate=msel%MyDate、YEAR_MSEL/MyDate、DATE_MSEL; longhour=msel%MyDate、DATE_MSEL/MyDate、HOUR_MSEL;longminute=msel%MyDate、HOUR_MSEL/MyDate、MINUTE_MSEL; longsecond=msel%MyDate、MINUTE_MSEL/1000; Stringresult=""; if(boo) result="已过去";else result="还有"; result+=(year+"年"+date+"天"+hour+"小时"+minute+"分钟"+second+"秒"); returnresult; } /***返回此日历得字符串表示形式。*return-此日历得字符串表示形式。*/ publicStringtoString() { returnyear+"年"+month+"月"+date+"日,"+hour+":"+minute+":"+second;}}测试类源文件:TestMyDate、java/***MyDate得测试类*author段智敏*/publicclassTestMyDate{ publicstaticvoidmain(String[]args) { MyDatemd1=newMyDate();MyDatemd2=newMyDate(2014,1,30); System、out、println("当前时间:"+md1、toString());System、out、println("2014年除夕:"+md2、toString()); md2、addOneDay(); System、out、println("增加一天后,大年初一:"+md2、toString()); }}4、10求前n个质数。要求确定m就就是否就就是质数,用早先求出得质数对m得整除性来确定。/***求前n个质数。<BR>*确定m就就是否就就是质数,用早先求出得质数对m得整除性来确定。<BR>*author段智敏*/publicclassWork4_10{ /**用来存质数得数组*/privateintarrayInt[];publicWork4_10(intn){ arrayInt=newint[n];arrayInt[0]=2;intindex=1;//保存数组得有效长度 booleanboo=true; for(inti=2;i<arrayInt、length;i++){ boo=true; for(intj=0;j<index;j++) { if(i%arrayInt[j]==0)//用已存入数组中得质数判断 boo=false; } if(boo)//如果就就是true则就就是指数,存入数组,数组有效长度加1、 { arrayInt[index]=i; index++; } }}/***打印数组元素*/publicStringprintArray() { Stringresult="";for(inti=0;i<arrayInt、length;i++) { if(arrayInt[i]!=0) result+=arrayInt[i]+""; }returnresult;} publicstaticvoidmain(String[]args) {Work4_10w=newWork4_10(100); System、out、println(w、printArray()); }}4、11编写实现从两个字符串中找出最长得相同字符列得代码。程序运行结果:/***找出两个字符串中,最长得相同字符列*author段智敏*/publicclassWork4_11{publicstaticvoidmain(String[]args){ Stringstr1="0000abcdef0000"; Stringstr2="123ab4567cdef789abcdef"; Stringstr3=getLongSameString(str1,str2); System、out、println("str1="+str1);System、out、println("str2="+str2);System、out、println("最长得相同字符串为:"+str3); }publicstaticStringgetLongSameString(Stringstr1,Stringstr2){ Stringtemp=""; Stringsame=""; StringlongSame="";for(inti=0;i<str1、length();i++) { for(intj=i+1;j<=str1、length();j++) {temp=str1、substring(i,j); if(str2、indexOf(temp)>0) { same=temp; if(longSame、length()<same、length()){ longSame=temp; } } } } returnlongSame; }}4、12整理字符串,将字符

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论