![语言程序设计第2版-课后习题与答案_第1页](http://file4.renrendoc.com/view/710045e1c2cf59cf6d9d803cc9b507d9/710045e1c2cf59cf6d9d803cc9b507d91.gif)
![语言程序设计第2版-课后习题与答案_第2页](http://file4.renrendoc.com/view/710045e1c2cf59cf6d9d803cc9b507d9/710045e1c2cf59cf6d9d803cc9b507d92.gif)
![语言程序设计第2版-课后习题与答案_第3页](http://file4.renrendoc.com/view/710045e1c2cf59cf6d9d803cc9b507d9/710045e1c2cf59cf6d9d803cc9b507d93.gif)
![语言程序设计第2版-课后习题与答案_第4页](http://file4.renrendoc.com/view/710045e1c2cf59cf6d9d803cc9b507d9/710045e1c2cf59cf6d9d803cc9b507d94.gif)
![语言程序设计第2版-课后习题与答案_第5页](http://file4.renrendoc.com/view/710045e1c2cf59cf6d9d803cc9b507d9/710045e1c2cf59cf6d9d803cc9b507d95.gif)
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
...wd......wd......wd...Java语言程序设计第2版(郑莉)第二章习题答案1.什么是对象、类,它们之间的联系答:1〕对象是包含现实世界物体特征的抽象实体,它反映系统为之保存信息和与它交互的能力。对象是一些属性及服务的封装体,在程序设计领域,可以用“对象=数据+作用于这些数据上的操作〞来表示。现实生活中对象是指客观世界的实体;在程序中对象是指一组变量和相关方法的集合。2〕类是既有一样操作功能和一样的数据格式的对象的集合与抽象!两者的关系:对象是类的具体实例.。2.什么是面向对象的程序设计方法它有那些基本特征答:面向对象程序设计从所处理的数据入手,以数据为中心而不是以服务为中心来描述系统。它把编程问题视为一个数据集合,数据相对于功能而言,具有更强的稳定性。它的特征:抽象,封装,继承,多态。3〔无用〕4.请解释类属性、实例属性及其区别。 答:实例属性,由一个个的实例用来存储所有实例都需要的属性信息,不同实例的属性值可能会不同。5.请解释类方法、实例属性及其区别。答:实例方法表示特定对象的行为,在声明时前面不加static修饰符,在使用时需要发送给一个类实例。 类方法也称为静态方法,在方法声明时前面需加static修饰符,类方法表示具体实例中类对象的共有行为。 区别:实例方法可以直接访问实例变量,调用实例方法,实例方法可以直接访问类变量,调用类方法;类方法可以直接调用类变量和类方法,类方法不能直接调用实例变量和实例方法;6.类的访问控制符有哪几种具体含义及其区别。答:类的访问控制符只有public〔公共类〕及无修饰符〔默认类〕两种。区别:当使用public修饰符时表示所有其他的类都可以使用此类;当没有修饰符时,那么只有与此类处于同一包中的其他类可以使用类。7类成员的访问控制符有哪几种?他们对类成员分别有哪些访问限制的作用?答:类成员的访问控制符有public,private,protecte及无修饰符.public(公有的):用public修饰的成分表示公有的,也就是它可以被其他任何对象访问(前提是对累成员所在的类访问有访问权限).Private(保护的):类中限定为private的成员只能被这个类本身访问,在类外不可见。proteced〔保护的〕用该关键字修饰的成分是受保护的,只可以被同一类及其子类的实例对象访问。无修饰符〔默认的〕:public,private,protected这个三个限定符不是必须写的。如果不写,那么说明是“friendly〞,相应的成分可以被所在保重的各类访问。8简述构造方法的特点?答:构造方法主要有以下特点:构造方法的方法名与类名一样;构造方法没有返回类型〔修饰符void也不能有〕;构造方法通常被声明为公有的〔public〕;构造方法可以有任意多个参数;构造方法的主要作用是完成对象的初始化工作;构造方法不能在程序中显式的调用;在生成一个对象时,系统会自动调用该类的构造方法为新生成的对象初始化。9如果在类声明中声明了构造方法,系统是否还提供默认的构造方法?答:用户在进展类声明时,如果没有声明任何构造方法,系统会赋给此类一个默认〔无参〕的构造方法。但是,只要用户声明了构造方法,即使没有声明无参的构造方法,系统也不会再赋默认的构造方法。10:声明Patient类表示在门诊室中的病人。此类对象应包括name〔astring〕\sex〔achar〕、age(aninteger)、weight(afloat0、allergies(aboolean).声明存取及修改方法。在一个单独的累中,声明测试方法,并生成两个patient的例子:Atientapril=newPatient();April.setname(“zhangli〞)April.setSex(‘f’);;April.setage(330;April.setweigeht(154.72);April.setalolergies(true);System.out.println(“那么:〞+april.getname());System.out.println(“sex:〞+april.getsex());System.out.println(“age:〞+april.getage());System.outprintln(“weught:〞+april.getweight());\System.out.println(“allergies:〞+april.getallergies());声明并测试toString〔〕方法显示一个病人的aga、sex、name及allergies属性。答:publicclassPatient{privateStringname;privatecharsex;privateintage;privatefloatweight;privatebooleanallergies;publicvoidsetname(Stringa){name=a;}publicvoidsetsex(charb){sex=b;}publicvoidsetage(intc){age=c;}publicvoidsetweight(floatd){weight=d;}publicvoidsetallergies(booleane){allergies=e;}publicStringgetname(){returnname;}publicchargetsex(){returnsex;}publicintgetage(){returnage;}publicfloatgetweight(){returnweight;}publicbooleangetallergies(){returnallergies;}}publicclassText{publicstaticvoidmain(Stringargs[]){Patientapril=newPatient();april.setname("ZhangLi");april.setsex('f');april.setage(33);april.setweight(154.72f);april.setallergies(true);System.out.println("Name:"+april.getname());System.out.println("sex:"+april.getsex());System.out.println("age:"+april.getage());System.out.println("weight:"+april.getweight());System.out.println("allergies:"+april.getallergies());}}11:声明并测试一个复数类,其方法包括toString〔〕及复数的加、减、乘运算。答:publicclassComplex{privatefloata;privatefloatb;publicStringtoString(){if(a!=0)return(a+"i"+"+"+b);elsereturn(""+b);}publicComplex(floata,floatb){this.a=a;this.b=b;}publicvoidAdd(Complexp){this.a+=p.a;this.b+=p.b;}publicvoidDecrease(Complexp){this.a-=p.a;this.b-=p.b;}publicvoidMultiply(Complexp){this.a=this.a*p.a;this.b=this.b*p.b;}}publicclassComplexTexter{publicstaticvoidmain(Stringargs[]){Complexa=newComplex(2,4);Complexb=newComplex(5,8);a.Add(b);System.out.println(a.toString()+"\n");a.Decrease(b);System.out.println(a.toString()+"\n");a.Multiply(b);System.out.println(a.toString()+"\n");}}12:什么是UML它由哪几局部组成答:UML是图形化〔〕即可视化的建模语言,成为面向对象建模的标准语言。它由四局部组成:〔1〕视图〔2〕图〔3〕模型元素〔4〕通用机制13.常用的类与类之间的关系有哪几种。答:有关联、依赖、流、泛化、实现、使用。14.考虑学院、系及教员应该具有哪些属性,并画出它们之间关系的类图。第三章课后习题答案1.设N为自然数:n!=1*2*3*….*n称为n的阶乘,并且规定0!=1.试编程计算2!,4!,6!he10!.并将结果输出到屏幕上。答:publicclassMul{publicstaticvoidmain(Stringargs[]){inti,n;floats;for(n=0;n<=10;n=n+2){if(n==0)System.out.println("0!=1\n");else{s=1;for(i=1;i<=n;i++)s=s*i;System.out.println(n+"!="+s+"\n");}}}}2.编写程序,接收用户从键键盘上输入的三个整数x,y,z..从中选出最大和最小者,并编程实现。答:publicclassMath{publicstaticvoidmain(Stringargs[]){int[]IntArg=newint[args.length];for(inti=0;i<args.length;i++){IntArg[i]=Integer.parseInt(args[i]);}intmax,min;max=IntArg[0]>IntArg[1]?IntArg[0]:IntArg[1];max=max>IntArg[2]?max:IntArg[2];min=IntArg[0]<IntArg[1]?IntArg[0]:IntArg[1];min=min<IntArg[2]?min:IntArg[2];System.out.println("max="+max);System.out.println("min="+min);}}3.求出100一枚的宿舍,并将这些数在屏幕上5个乙杭地显示出来。答:publicclassSu{publicstaticvoidmain(Stringargs[]){intn,i,k=0,y;for(n=2;n<=100;n++){y=1;for(i=2;i<n;i++)if(n%i==0){y=0;break;}if(y==1){k++;System.out.print(n+"");if(k%5==0)System.out.print("\n");}}}}4.使用java.lang.Math类,生成100个0---99之间的随机整数,找出他们之中的最大值和最小值,并统计大于50的整数个数。publicclassRandom{publicstaticvoidmain(String[]args){intMinNum,MaxNum,n=0;int[]array=newint[100];array[0]=(int)(Math.random()*100);MinNum=array[0];MaxNum=array[0];System.out.println("数列为:");System.out.print(array[0]+"");for(inti=0;i<100;i++){array[i]=(int)(Math.random()*100);if(array[i]>50)n++;if(array[i]>=MaxNum)MaxNum=array[i];if(array[i]<=MinNum)MinNum=array[i];System.out.print(array[i]+"");}System.out.println();System.out.println("MinNum="+MinNum);System.out.println("MaxNum="+MaxNum);System.out.println("大于50的整数个数有:"+n);}}5.接收用户从键盘上输入的两个整数,求两个数的最大公约数和最小公倍数,并输出。publicclassTest2{publicstaticvoidmain(String[]args){int[]I=newint[args.length];for(inti=0;i<args.length;i++){I[i]=Integer.parseInt(args[i]);}intm,n,temp,t;if(I[0]<I[1]){temp=I[0];I[0]=I[1];I[1]=temp;}m=I[0];n=I[1];t=m%n;while(t!=0){m=t;n=m;t=m%n;}System.out.println("两个数的最大公约数为:"+n);System.out.println("两个数的最小公倍数为:"+I[0]*I[1]/n);}}6.从键盘上输入一件物品的价格〔范围在0.10~5.00元.〕,假设用户支付了一张5元纸币,请列出一种找零的方案,使得纸币及硬币的个数最少。如3.68元,应为两元一张、一元一张、五角一个、一角一个、五分一个、二分一个、一分一个。//Price类importjava.io.*;publicclassPrice{publicstaticvoidmain(Stringargs[]){System.out.println("enteranumber(0.01----5.00):");floata=Keyboard.getFloat();intc=(int)(a*100);intb=500-c;System.out.println("找零如下:");if(b/200!=0){System.out.println(b/200+"张2元");b-=(b/200)*200;}if(b/100!=0){System.out.println(b/100+"张1元");b-=(b/100)*100;}if(b/50!=0){System.out.println(b/50+"张5角");b-=(b/50)*50;}if(b/20!=0){System.out.println(b/20+"张2角");b-=(b/20)*20;}if(b/10!=0){System.out.println(b/10+"张1角");b-=(b/10)*10;}if(b/5!=0){System.out.println(b/5+"个5分");b-=(b/5)*5;}if(b/2!=0){System.out.println(b/2+"个2分");b-=(b/2)*2;}if(b!=0)System.out.println(b+"个1分");}}//Keyboard类importjava.io.*;publicclassKeyboard{staticBufferedReaderinputStream=newBufferedReader(newInputStreamReader(System.in));publicstaticintgetInteger(){try{return(Integer.valueOf(inputStream.readLine().trim()).intValue());}catch(Exceptione){e.printStackTrace();return0;}}publicstaticStringgetString(){try{return(inputStream.readLine());}catch(IOExceptione){return"0";}}publicstaticfloatgetFloat(){Strings="";try{BufferedReaderin=newBufferedReader(newInputStreamReader(System.in));s=in.readLine();return(Float.parseFloat(s));}catch(IOExceptione){System.out.println("输入非法!");return(0.0f);}}}运行结果:7.什么是异常解释抛出、捕获的含义。答:异常又称为例外,是特殊的运行错误对象,在程序中可以强制编译器来处理程序运行中的发生的并非由程序本身所造成的错误;抛出异常:把生成异常对象并提交的过程称为抛出异常;抛出异常是java中一个程序处理动作,检查异常时要么在方法中声明一个异常抛出,用try-catch语句捕获异常,并进展处理。8.简述Java的异常处理机制。答:java中声明了很多异常类,每个异常类都代表了一种运行错误,类中包含了该运行错误的信息和处理错误的方法等内容。每当java程序运行过程中发生一个可识别的运行错误时,即该错误有一个异常类与之相对应时,系统都会产生一个相应的该异常类的对象,即产生一个异常。一旦一个异常对象产生了,系统中就一定有相应的机制来处理它,确保不会产生死机、死循环或其他对操作系统的损害,从而保证了整个程序运行的安全性。9.系统定义的异常与用户自定义的异常有何不同如何使用这两类异常答:系统定义的特定情况出现的问题,而此时用来对可能遇到的问题进展处理。用户定义的是自己觉得可能会出现问题时,需要处理的。这样防止程序中断或是出现未知错误。系统异常有两种一种是运行时异常,一种是普通异常,普通异常要求用户捕获或者抛出的,不补货或者抛出就会编译不通过。运行时异常编译可以通过,但是运行时才显露出来。10.用户如何自定义异常编程实现一个用户自定义异常。〔1〕定义mytestimportjava.io.*;publicclassmytest{ privatestaticintquotient(intnumber,intdenominator)throws DivideByZeroException{ if(denominator==0) thrownewDivideByZeroException(); return(number/denominator);}publicstaticvoidmain(Stringargs[]){ intnumber1=0,number2=0,result=0; try{ System.out.println("输入第一个数字:"); number1=Integer.valueOf(Keyboard.getString()).intValue(); System.out.println("输入第二个数字:"); number2=Integer.valueOf(Keyboard.getString()).intValue(); result=quotient(number1,number2); } catch(NumberFormatExceptione){ System.out.println(e.toString()); System.exit(-1); } System.out.println(number1+"/"+number2+"="+result);}}〔2〕定义DivideByZeroExceptionpublicclassDivideByZeroExceptionextendsArithmeticException{ publicDivideByZeroException(){ super("除数不能为0!");}}〔3〕定义Keyboardimportjava.io.*;publicclassKeyboard{staticBufferedReaderinputStream=newBufferedReader(newInputStreamReader(System.in));publicstaticintgetInteger(){try{return(Integer.valueOf(inputStream.readLine().trim()).intValue());}catch(Exceptione){e.printStackTrace();return0;}}publicstaticStringgetString(){try{return(inputStream.readLine());}catch(IOExceptione){return"0";}}}第四章课后习题答案1.子类将继承父类所有的属性和方法吗为什么答:不,子类不能直接访问从父类中继承的私有属性及方法,但可以对公有及保护方法进展访问。2.方法的覆盖与方法的重载有何不同答:覆盖是运用在子类中实现与父类一样的功能,但采用不同的算法或公式;在名字一样的方法中,要做比父类更多的事情;在子类中需要取消从父类继承的方法。3.声明两个带有无参构造方法的两个类A和B,声明A的子类C,并且声明B为C的一个成员,不声明C的构造方法。编写测试代码,生成类C的实例对象,并观察结果。//A类publicclassA{ publicA(){ System.out.println("输出A类"); }}//B类publicclassB{ publicB(){ System.out.println("输出B类"); }}//C类publicclassCextendsA{ Bb=newB();}//测试类publicclasstest4_3{ publicstaticvoidmain(Stringargs[]){ Cc=newC(); }}运行结果:4.声明一个基类A,它只有一种非默认构造方法;声明A的子类B,B具有默认方法及非默认方法,并在B的构造方法中调用基类A的构造方法。//A类publicclassA{publicA(Stringlin){ System.out.println("A类的非默认构造方法"+lin); }}//B类publicclassBextendsA{publicB(){super("Fuckyourteacher"); System.out.println("B默认类构造方法"); }publicB(Stringlin){super(lin); System.out.println("B类非构造方法"); }}//测试类publicclasstest4_4{publicstaticvoidmain(Stringargs[]){newB(); System.out.println();newB("Fuckmyteacher"); }}运行结果:5.声明一个类,它具有一种方法,此方法被重载三次,派生一个新类,并增加一种新的重载方法,编写测试类验证四种方法对于派生类验证四种方法对于派生类都有效。//A类publicclassA{ publicvoidshowTime(){ System.out.println("空重载"); } publicvoidshowTime(intl){ System.out.println("整形参数重载"); } publicvoidshowTime(charl){ System.out.println("字符参数重载"); }}//B类publicclassBextendsA{ publicvoidshowTime(Stringl){ System.out.println("字符串参数重载"); }}//测试类publicclasstest4_5{publicstaticvoidmain(Stringargs[]){ Bb=newB(); b.showTime(); b.showTime(5); b.showTime('f'); b.showTime("林楚金"); }}6.声明一个具有final方法的类,声明一个派生类,并试图对这个方法进展重写,会有什么结果。//A类publicclassA{ publicfinalvoidshowTime(){ System.out.println("类A中方法"); }}//B类publicclassBextendsA{ publicvoidshowTime(){ System.out.println("类B中方法"); }}//测试类publicclasstest4_6{ publicstaticvoidmain(Stringargs[]){ Bb=newB(); b.showTime(); }}运行结果:〔说白了就是B中showTime()的无法覆盖A中showTime(),被覆盖为final,不能覆盖。〕7.声明一个final类,并试图声明其派生类,会有什么结果。//A类publicfinalclassA{}//B类publicclassBextendsA{}//测试类publicclasstest4_7{ publicstaticvoidmain(Stringargs[]){ Bb=newB(); }}运行结果:〔说白了就是无法从A中进展继承〕8.什么是抽象类抽象类中是否一定要包括抽象方法答:抽象类是一个不完全的类,不能使用new方法进展实例化。抽象类可以包含抽象方法,也可以不包含抽象方法,但有抽象方法的必须是抽象类。9.this和super分别有哪些特殊含义都有哪些种用法答:this表示当前类;super表示调用父类。在定义类的时候用到,this是当前对象的引用,super是当前对象的父类对象的引用,一般的都是把super用在构造函数中。10.完成下面父类及子类的声明:(1)声明Student类属性包括学号、姓名、英语成绩、数学成绩、计算机成绩和总成绩。方法包括构造方法、get方法、set方法、toString方法、equals方法、compare方法〔比较两个学生的总成绩,结果分为大于、小于、等于〕,sum方法〔计算总成绩〕和testScore方法〔计算评测成绩〕。注:评测成绩可以取三门课成绩的平均分,另外任何一门课的成绩的改变都需要对总成绩进展重新计算,因此,在每一个set方法中应调用sum方法计算总成绩。publicclassStudent{Stringid;Stringname;floatscoreOfenglish;floatscoreOfmath;floatscoreOfcomputer;floatscoreOfsum;//构造方法publicStudent(){}publicStudent(Stringaid,Stringaname,floatascoreOfenglish,floatascoreOfmath,floatascoreOfcomputer){this.id=aid;=aname;this.scoreOfenglish=ascoreOfenglish;this.scoreOfmath=ascoreOfmath;this.scoreOfcomputer=ascoreOfcomputer;//this.scoreOfsum=ascoreOfenglish+ascoreOfmath+ascoreOfcomputer;this.scoreOfsum=sum();}//sum方法publicfloatsum(){return(this.scoreOfenglish+this.scoreOfmath+this.scoreOfcomputer);}//testScore测评成绩/平均分publicfloattestScore(){return(this.scoreOfsum/3);}//6个get方法publicStringgetid(){return(id);}publicStringgetname(){return(name);}publicfloatgetscoreOfenglish(){return(scoreOfenglish);}publicfloatgetscoreOfmath(){return(scoreOfmath);}publicfloatgetscoreOfcomputer(){return(scoreOfcomputer);}publicfloatgetscoreOfsum(){return(scoreOfsum);}//5个set方法publicvoidsetid(Stringnewid){this.id=newid;}publicvoidsetname(Stringnewname){=newname;}publicvoidsetscoreOfenglish(floatnewscoreOfenglish){this.scoreOfenglish=newscoreOfenglish;this.scoreOfsum=sum();}publicvoidsetscoreOfmath(floatnewscoreOfmath){this.scoreOfmath=newscoreOfmath;this.scoreOfsum=sum();}publicvoidsetscoreOfcomputer(floatnewscoreOfcomputer){this.scoreOfcomputer=newscoreOfcomputer;this.scoreOfsum=sum();}//toString方法publicStringtoString(){return("学号:"+this.id+"\n姓名:"+name+"\n英语:"+this.scoreOfenglish+"\n数学:"+this.scoreOfmath+"\n计算机:"+this.scoreOfcomputer+"\n总分:"+this.scoreOfsum);}//compare方法/比较2学生总分publicvoidcompare(Studentx){if(this.getscoreOfsum()>x.getscoreOfsum())System.out.println(this.getname()+"总分大于"+x.getname());if(this.getscoreOfsum()<x.getscoreOfsum())System.out.println(this.getname()+"总分小于"+x.getname());elseSystem.out.println(this.getname()+"总分等于"+x.getname());}//equals方法/比较2学生学号是否相等(还没完善)/**publicbooleanequals(Objectx){if(this.getClass()!=x.getClass())returnfalse;Studentb=(Student)x;if(this.id==b.getid())returntrue;}*/}(2〕声明StudentXW(学习委员)类为Student类的子类。在StudentXW类中增加责任属性,并重写testScore方法〔评测成绩=三门课平均分+3〕publicclassStudentXWextendsStudent{Stringresponsibility;//构造方法publicStudentXW(){super();//responsibility="";}publicStudentXW(Stringaid,Stringaname,floatascoreOfenglish,floatascoreOfmath,floatascoreOfcomputer,Stringaresponsibility){super(aid,aname,ascoreOfenglish,ascoreOfmath,ascoreOfcomputer);responsibility=aresponsibility;}//testScore测评成绩/平均分publicfloattestScore(){return(this.scoreOfsum/3+3);}//toString方法publicStringtoString(){return("学号:"+this.id+"\n姓名:"+name+"\n英语:"+this.scoreOfenglish+"\n数学:"+this.scoreOfmath+"\n计算机:"+this.scoreOfcomputer+"\n总分:"+this.scoreOfsum+"\n职位:"+this.responsibility);}}(3〕声明StudentBZ类为Student类的子类在StudentBZ类中增加责任属性,并重写testScore方法〔评测成绩=三门课平均分+5〕publicclassStudentBZextendsStudent{Stringresponsibility;//构造方法publicStudentBZ(){super();//responsibility="";}publicStudentBZ(Stringaid,Stringaname,floatascoreOfenglish,floatascoreOfmath,floatascoreOfcomputer,Stringaresponsibility){super(aid,aname,ascoreOfenglish,ascoreOfmath,ascoreOfcomputer);responsibility=aresponsibility;}//testScore测评成绩/平均分publicfloattestScore(){return(this.scoreOfsum/3+5);}//toString方法publicStringtoString(){return("学号:"+this.id+"\n姓名:"+name+"\n英语:"+this.scoreOfenglish+"\n数学:"+this.scoreOfmath+"\n计算机:"+this.scoreOfcomputer+"\n总分:"+this.scoreOfsum+"\n职位:"+this.responsibility);}}4〕声明测试类,生成假设干个Student类、StudentXW类及StudentBZ类对象,并分别计算它们的评测成绩(建议采用:写一个测试函数,该函数以父类student数组作为参数)。importjava.text.*;publicclasstest4_10{publicstaticvoidmain(Stringargs[]){Studentsu=newStudent("001","苏轼",56.00f,87.00f,95.00f); Studentdu=newStudent("002","杜甫",86.00f,75.00f,80.00f); Studentbai=newStudent("003","白居易",42.00f,77.00f,65.00f); Studentliu=newStudent("004","柳宗元",67.00f,67.00f,67.00f); StudentXWou=newStudentXW("005","欧阳修",89.00f,98.00f,90.00f,"数学代表"); StudentXWwang=newStudentXW("006","王安石",98.00f,87.00f,36.00f,"英语代表"); StudentBZli=newStudentBZ("007","李白",89.00f,87.00f,87.00f,"班长");System.out.print(li); System.out.println("\n评测成绩:"+newDecimalFormat("0.00").format(li.testScore())); System.out.println(); System.out.print(wang); System.out.println("\n评测成绩:"+newDecimalFormat("0.00").format(wang.testScore())); System.out.println(); System.out.print(ou); System.out.println("\n评测成绩:"+newDecimalFormat("0.00").format(ou.testScore())); System.out.println(); System.out.print(su); System.out.println("\n评测成绩:"+newDecimalFormat("0.00").format(su.testScore())); System.out.println(); System.out.print(du); System.out.println("\n评测成绩:"+newDecimalFormat("0.00").format(du.testScore())); System.out.println(); System.out.print(bai); System.out.println("\n评测成绩:"+newDecimalFormat("0.00").format(bai.testScore())); System.out.println(); System.out.print(liu); System.out.println("\n评测成绩:"+newDecimalFormat("0.00").format(liu.testScore()));}}运行test4_10的结果如下:〔很好玩吧,李白,我让你挂科。〕11.包有什么作用如何创立包和引用包中的类答:包是一种松散的类的组合,一般不要求处于同一包中的类型有明确的相互关系,但由于同一包中的类在默认情况下可以相互访问,所以为了方便编程和管理,通常把需要在一起工作的类放在一个包里。利用包来管理类,可实现类的共享与复用。在操作系统中,目录用来组织文件,设置权限。只要在要用到包中类的时候,在该引用类的第一行加上:package(包的全路径)即可。第五章课后习题答案1.什么是接口接口起什么作用接口与抽象类有何区别答:Java中的接口是一系列方法的声明,是一些方法特征的集合,一个接口只有方法的特征没有方法的实现,因此这些方法可以在不同的地方被不同的类实现,而这些实现可以具有不同的行为(功能)。作用:接口是面向对象的一个重要机制,使用接口可以实现多态继承;接口中的所有方法都是抽象的,这些抽象方法由实现这一接口的不同类型来具体;接口还可以用来实现不同类之间的常量共享。与抽象类不同的是:接口允许在看起来不相干的类之间定义共同行为。2.试编程证明接口中的属性都隐含为static及final,所有的方法都为public。//定义接口Shape2DinterfaceShape2D{doublePi=3.14;doublearea();}//Circle类继承接口Shape2DpublicclassCircleimplementsShape2D{doubleradius;publicCircle(doubler){radius=r;}publicdoublearea(){returnPi*radius*radius;}}//A类〔测试接口中隐含final的area()方法〕publicclassAextendsShape2D{publicdoublearea();}//test5_2publicclasstest5_2{publicstaticvoidmain(Stringargs[]){Circlec=newCircle(10);System.out.println("Pi=3.14圆的面积:"+c.area());SetPib=newSetPi(3.00);System.out.println("改变Pi=3.00圆的面积:"+c.area());}}运行结果:3.在什么情况下,可以对父类对象的引用进展强制类型转换,使其转化成子类对象的引用答:一个对象被塑型为父类或接口后,可以再一次被塑型回到它原来所属的类,即转化成原类对象的引用。4.声明一个接口,此接口至少具有一个方法;在一个方法中声明内部类实现此接口,并返回此接口的引用。//A类接口publicinterfaceA{ voidfuck();}//B类publicclassB{ publicAfuck(){ returnnewA(){ publicvoidfuck(){ System.out.println("B类声明实现A接口类并返回接口的应用——Fuckyou!"); } };/*注意这里有分号“;〞*/ }}//test5_4publicclasstest5_4{ publicstaticvoidmain(String[]args){ newB().fuck().fuck(); }}运行结果:5.声明一个具有内部类的类,此内部类只有一个非默认的构造方法;声明另外一个具有内部类的类,此内部类继承第一个内部类。//A类classA{ classClassOfA{ publicClassOfA(){ } }}//B类publicclassB{ classClassOfBextendsA.ClassOfA{ publicClassOfB(Ab){ b.super(); } }}6.声明一个具有两个方法的类,在第一个方法中调用第二个方法。声明此类的一个子类,并在子类中重写第二个方法。生成一个子类的对象,并将其塑型为基类,调用第一个方法,解释会发生什么//A类publicclassA{ publicStringWay1(){return"A的方法1和"+Way2();} publicStringWay2(){return"A的方法2";}}//B类publicclassBextendsA{ publicStringWay2(){ return"B的方法2"; }}//test5_6publicclasstest5_6{ publicstaticvoidmain(Stringargs[]){ Aa=newB(); System.out.println(a.Way1());}}7.什么是多态如何实现多态答:多态性是指不同类型的对象可以响应一样的消息。利用向上塑性技术,一个父类的应引用变量可以指向不同的子类对象;而利用动态绑定技术,可以再运行时根据父类引用变量所指对象的世纪类型执行相应的子类方法,从而实现多态性。8.在第4章习题10的根基上,声明测试类完成对多态性的测试。〔1〕在主方法中声明Student类的数组〔含五个元素〕〔2〕生成五个对象存入数组:其中三个Student类的对象、一个StudentXW类的对象、一个StudentBZ类的对象。〔3〕将方法testScore〔〕发送给数组的每一个元素,输出结果,并分析具体执行的是哪一个类中的方法。//Student类publicclassStudent{Stringid;Stringname;floatscoreOfenglish;floatscoreOfmath;floatscoreOfcomputer;floatscoreOfsum;//构造方法publicStudent(){}publicStudent(Stringaid,Stringaname,floatascoreOfenglish,floatascoreOfmath,floatascoreOfcomputer){this.id=aid;=aname;this.scoreOfenglish=ascoreOfenglish;this.scoreOfmath=ascoreOfmath;this.scoreOfcomputer=ascoreOfcomputer;//this.scoreOfsum=ascoreOfenglish+ascoreOfmath+ascoreOfcomputer;this.scoreOfsum=sum();}//sum方法publicfloatsum(){return(this.scoreOfenglish+this.scoreOfmath+this.scoreOfcomputer);}//testScore测评成绩/平均分publicfloattestScore(){return(this.scoreOfsum/3);}//6个get方法publicStringgetid(){return(id);}publicStringgetname(){return(name);}publicfloatgetscoreOfenglish(){return(scoreOfenglish);}publicfloatgetscoreOfmath(){return(scoreOfmath);}publicfloatgetscoreOfcomputer(){return(scoreOfcomputer);}publicfloatgetscoreOfsum(){return(scoreOfsum);}//5个set方法publicvoidsetid(Stringnewid){this.id=newid;}publicvoidsetname(Stringnewname){=newname;}publicvoidsetscoreOfenglish(floatnewscoreOfenglish){this.scoreOfenglish=newscoreOfenglish;this.scoreOfsum=sum();}publicvoidsetscoreOfmath(floatnewscoreOfmath){this.scoreOfmath=newscoreOfmath;this.scoreOfsum=sum();}publicvoidsetscoreOfcomputer(floatnewscoreOfcomputer){this.scoreOfcomputer=newscoreOfcomputer;this.scoreOfsum=sum();}//toString方法publicStringtoString(){return("学号:"+this.id+"\n姓名:"+name+"\n英语:"+this.scoreOfenglish+"\n数学:"+this.scoreOfmath+"\n计算机:"+this.scoreOfcomputer+"\n总分:"+this.scoreOfsum);}//compare方法/比较2学生总分publicvoidcompare(Studentx){if(this.getscoreOfsum()>x.getscoreOfsum())System.out.println(this.getname()+"总分大于"+x.getname());if(this.getscoreOfsum()<x.getscoreOfsum())System.out.println(this.getname()+"总分小于"+x.getname());elseSystem.out.println(this.getname()+"总分等于"+x.getname());}//equals方法/比较2学生学号是否相等/**publicbooleanequals(Objectx){if(this.getClass()!=x.getClass())returnfalse;Studentb=(Student)x;if(this.id==b.getid())returntrue;}*/}//StudentXWpublicclassStudentXWextendsStudent{Stringresponsibility;//构造方法publicStudentXW(){super();//responsibility="";}publicStudentXW(Stringaid,Stringaname,floatascoreOfenglish,floatascoreOfmath,floatascoreOfcomputer,Stringaresponsibility){super(aid,aname,ascoreOfenglish,ascoreOfmath,ascoreOfcomputer);responsibility=aresponsibility;}//testScore测评成绩/平均分publicfloattestScore(){return(this.scoreOfsum/3+3);}//toString方法publicStringtoString(){return("学号:"+this.id+"\n姓名:"+name+"\n英语:"+this.scoreOfenglish+"\n数学:"+this.scoreOfmath+"\n计算机:"+this.scoreOfcomputer+"\n总分:"+this.scoreOfsum+"\n职位:"+this.responsibility);}}//StudentBZpublicclassStudentBZextendsStudent{Stringresponsibility;//构造方法publicStudentBZ(){super();//responsibility="";}publicStudentBZ(Stringaid,Stringaname,floatascoreOfenglish,floatascoreOfmath,floatascoreOfcomputer,Stringaresponsibility){super(aid,aname,ascoreOfenglish,ascoreOfmath,ascoreOfcomputer);responsibility=aresponsibility;}//testScore测评成绩/平均分publicfloattestScore(){return(this.scoreOfsum/3+5);}//toString方法publicStringtoString(){return("学号:"+this.id+"\n姓名:"+name+"\n英语:"+this.scoreOfenglish+"\n数学:"+this.scoreOfmath+"\n计算机:"+this.scoreOfcomputer+"\n总分:"+this.scoreOfsum+"\n职位:"+this.responsibility);}}//test5_8importjava.text.*;publicclasstest5_8{publicstaticvoidmain(Stringargs[]){ Studentstudent[]={ newStudent("001","苏轼",56.00f,87.00f,95.00f), newStudent("002","杜甫",86.00f,75.00f,80.00f), newStudent("003","白居易",42.00f,77.00f,65.00f), newStudentXW("006","王安石",98.00f,87.00f,36.00f,"英语代表"), newStudentBZ("007","李白",89.00f,87.00f,87.00f,"班长") }; for(inti=0;i<5;i++) { System.out.println("学生名字:"+student[i].getname()+"\t评测成绩:"+newDecimalFormat("0.00").format(student[i].testScore())); }}}运行结果:在主函数定义student数组的五个对象Studentstudent[5]={newStudent(),newStudent(),newStudent(),newStudentXW(),newStudentBZ()}中,输出时,第1、2、3个调用的是Student中的方法,第4个调用的是StudentXW的方法,第5个调用的是StudentBZ的方法。第六章课后习题答案1.将本章例6-1至6-18中出现的文件的构造方法均改为使用File类对象作为参数实现。个人理解:File类只能对整文件性质进展处理,而没法通过自己直接使用file.Read()或者是file.write()类似方法对文件内容进展写或者读取。注意:是直接;下面只提供一个例2变化,其他的你自己做,10几道啊,出这题的人真他妈有病。importjava.io.*;publicclasstest6_2{publicstaticvoidmain(String[]args)throwsIOException{ StringfileName="D:\\Hello.txt"; Filewriter=newFile(fileName); writer.createNewFile(); BufferedWriterinput=newBufferedWriter(newFileWriter(writer)); input.write("Hello!\n"); input.write("thisismyfirsttextfile,\n"); input.write("你还好吗\n"); input.close(); }}运行结果:〔电脑系统问题,没法换行,所以一般使用BuffereWriter中newLine()实现换行〕2.模仿文本文件复制的例题,编写对二进制文件进展复制的程序.//CopyMaker类importjava.io.*;classCopyMaker{StringsourceName,destName;BufferedInputStreamsource; BufferedOutputStreamdest;intline;//翻开源文件和目标文件,无异常返回trueprivatebooleanopenFiles(){try{source=newBufferedInputStream(newFileInputStream(sourceName)); }catch(IOExceptioniox){ System.out.println("Problemopening"+sourceName);returnfalse;}try{dest=newBufferedOutputStream(newFileOutputStream(destName));}catch(IOExceptioniox){ System.out.println("Problemopening"+destName);returnfalse;}returntrue;}//复制文件privatebooleancopyFiles(){try{line=source.read();while(line!=-1){dest.write(line); line=source.read(); } }catch(IOExceptioniox){ System.out.println("Problemreadingorwriting");returnfalse; }returntrue; }//关闭源文件和目标文件privatebooleancloseFiles(){booleanretVal=true;try{source.close();}catch(IOExceptioniox){ System.out.println("Problemclosing"+sourceName); retVal=false; }try{dest.close();}catch(IOExceptioniox){ System.out.println("Problemclosing"+destName); retVal=false; }returnretVal; }//执行复制publicbooleancopy(Stringsrc,Stringdst){sourceName=src;destName=dst;returnopenFiles()&©Files()&&closeFiles();}}//test6_2publicclasstest6_2{publicstaticvoidmain(String[]args){ Strings1="lin.txt",s2="newlin.txt";if(newCopyMaker().copy(s1,s2)) System.out.print("复制成功");else System.out.print("复制失败");}}运行前的两个文本:lin.txt和newlin.txt〔为空〕运行后:3.创立一存储假设干随机整数的文本文件,文件名、整数的个数及范围均由键盘输入。//memory存储类importjava.io.*;importjava.util.Random;publicclassmemory{privateStringname;privateintcount;privateintMax;privateintMin;publicmemory(Stringn,intc,intmin,intmax){=n;this.count=c;this.Min=min;this.Max=max; }publicvoidstartmemory(){try{ FileWriterout=newFileWriter(name);intlimit=Max-Min; Randomrandom=newRandom();for(inti=1;i<=count;i++){intnumber=Min+random.nextInt(limit); System.out.print(number); System.out.print(""); out.write(number+""); } out.close(); }catch(IOExceptioniox){ System.out.println("方法startmemory()有问题"); } }}//test6_3importjava.io.*;importjava.util.Scanner;publicclasstest6_3{publicstaticvoidmain(String[]args)throwsIOException{//BufferedReader StringfileName;intcount,min,max; Scannerin=newScanner(System.in); System.out.println("输入要存储的文件名"); fileName=in.next(); System.out.println("输入随机数个数"); count=in.nextInt(); System.out.println("输入随机数最小值"); min=in.nextInt(); System.out.println("输入随机数最大值"); max=in.nextInt(); memoryM=newmemory(fileName,count,min,max); M.startmemory(); }}}运行结果:naruto文件存储二进制数:4.分别使用FileWriter和BufferedWriter往文件中写入10万个随机数,比较用时的多少。//FileWriter方法importjava.io.*;publicclassfileWriter{publicstaticvoidmain(String[]args)throwsIOException{longtime=System.currentTimeMillis();//当前时间 FileWriterfilewriter=newFil
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 个人商铺抵押借款合同范本
- 云服务器托管服务合同(三)
- 二手厂房买卖合同
- 个人劳动合同基础版范本
- 二手挖掘机购销合同范本
- 乡村荒地租赁经营合同
- 业务合作合同典范
- 个人车位转让合同范例文案
- 个人技术开发合同范本
- 临时工招聘合同范本-含合同附件
- 1-1 拥抱梦想:就这样埋下一颗种子【2022中考作文最热8主题押题24道 构思点拨+范文点评】
- 职业暴露与防护
- 年产15吨透明质酸生产车间的初步工艺设计
- 大模型在航空航天领域的应用:智能探索宇宙的无限可能
- 酒店行业客源渠道分析
- 2024年中国陪诊服务行业市场发展趋势预测报告-智研咨询重磅发布
- AVL-CRUISE-2019-整车经济性动力性分析操作指导书
- 肠道医学解剖和生理学
- 人教版九年级英语动词时态专项练习(含答案和解析)
- 兰州市规范医疗服务价格项目基准价格表
- 火灾隐患整改登记表
评论
0/150
提交评论