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

下载本文档

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

文档简介

/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的正整数时候,程序结束 } else returnnumber; } /** *弹出对话框,显示结果 *@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什么是面向对象技术?它有什么优点?答:面向对象技术强调在软件开发过程中面向客观世界或问题域中的事物,采用人类在认识客观世界的过程中普遍运用的思维方法,直观、自然地描述客观世界中的有关事物。面向对象技术的基本特征主要有抽象性、封装性、继承性和多态性。3.2面向对象程序设计与面向过程程序设计有什么区别?答:面向过程程序设计关注的是函数功能的实现;面向对象程序设计关注将函数和数据如何绑定到一个对象,通过对象的描述、对象间的关系、类的管理实现程序的功能。3.3程序中类和对象有什么区别?答:类是一组对象共性的集合。类具有行为,它描述一个对象能够做什么以与做的方法,它们是可以对这个对象进行操作的程序和过程。对象是类的一个实例,它代表一个现实物理“事件”。3.4类变量和实例变量,以与类方法和实例方法的区别。

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

同包继承不同包继承(import进来的)私有(private)不继承不继承友好(缺省默认)继承不继承受保护(protected)继承继承共有(public)继承继承3.6子类在什么情况下能隐藏超类的成员变量和方法?解:子类重载父类的成员变量、方法时候。3.7在子类中是否允许有一个方法和超类的方法名字相同,而类型不同?解:不允许。方法重写是指:子类中定义一个方法,并且这个方法的名字、返回类型、参数个数、和类型与从父类继承的方法完全相同。3.12以下程序有什么错误?解:类方法main()调用了类的实例变量,main方法是类方法,不能调用类的实例变量a,导致错误!3.13声明一个复数类Complex。实现其基本功能。复数类:Complex.java/***复数类*@author段智敏*/publicclassComplex{ privatedoublereal;//real为实部 privatedoubleimage;//image为虚部 publicComplex() { real=Double.NaN; image=Double.NaN; } /** *构造方法 *@paramreal-实部 *@paramimage-虚部 */ publicComplex(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-虚部 */ publicvoidsetComplex(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-当前复数对象与参数指定的复数对象的和 */ publicComplexadd(Complexval) { Complexresult=newComplex(this.real+val.getReal(),this.image+val.getImage()); returnresult; } /** *复数减法,当前对象减去参数对象 *@paramval-另一个复数 *@return-当前复数对象与参数指定的复数对象的差 */ publicComplexsubtract(Complexval)//,返回, { Complexresult=newComplex(this.real-val.getReal(),this.image-val.getImage()); returnresult; } /** *复数乘法 *@paramval-另一个复数 *@return-当前复数对象与参数指定的复数对象的积 */ publicComplexmultiply(Complexval) { Complexresult=newComplex(); result.setReal(this.real*val.getReal()-this.image*val.getImage()); result.setImage(this.real*val.getImage()+this.image*val.getReal()); returnresult; } /** *复数除法 *@paramval-另一个复数 *@return-当前复数对象与参数指定的复数对象的商 */ publicComplexdivide(Complexval) { Complexresult=newComplex(); 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; }}复数测试类:TestComplex.java程序运行结果:/***复数测试类*@author段智敏**/publicclassTestComplex{ publicstaticvoidmain(String[]args) { Complexcomplex1=newComplex(2,4); Complexcomplex2=newComplex(3,-1); Complexresult=newComplex(); System.out.println("复数1:"+complex1.toString()+";实部"+complex1.getReal()+";虚部" +complex1.getImage()); System.out.println("复数2:"+complex2.toString()+";实部"+complex2.getReal()+";虚部" +complex2.getImage()); result=complex1.add(complex2);//两个复数之和 System.out.println("复数:"+complex1.toString()+"与"+"复数:"+complex2.toString() +"之和为:"+result.toString()); result=complex1.subtract(complex2);//两个复数之差 System.out.println("复数:"+complex1.toString()+"与"+"复数:"+complex2.toString() +"之差为:"+result.toString()); result=complex1.multiply(complex2);//两个复数乘积 System.out.println("复数:"+complex1.toString()+"与"+"复数:"+complex2.toString() +"的乘积为:"+result.toString()); result=complex1.divide(complex2);//两个复数的商 System.out.println("复数:"+complex1.toString()+"与"+"复数:"+complex2.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.javaimportjava.util.Calendar;/***日历类*@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=

温馨提示

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

评论

0/150

提交评论