《最新Java语言程序设计课后习题答案.doc》由会员分享,可在线阅读,更多相关《最新Java语言程序设计课后习题答案.doc(40页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、精品资料Java语言程序设计课后习题答案.Java语言程序设计(郑莉)第二章习题答案1.什么是对象、类,它们之间的联系答:1)对象是包含现实世界物体特征的抽象实体,它反映系统为之保存信息和与它交互的能力。对象是一些属性及服务的封装体,在程序设计领域,可以用“对象=数据+作用于这些数据上的操作”来表示。现实生活中对象是指客观世界的实体;在程序中对象是指一组变量和相关方法的集合。2)类是既有相同操作功能和相同的数据格式的对象的集合与抽象!3) 两者的关系:对象是类的具体实例.。2.什么是面向对象的程序设计方法它有那些基本特征答:面向对象程序设计从所处理的数据入手,以数据为中心而不是以服务为中心来描
2、述系统。它把编程问题视为一个数据集合,数据相对于功能而言,具有更强的稳定性。它的特征:抽象,封装,继承,多态。3(无用)4请解释类属性、实例属性及其区别。答:实例属性,由一个个的实例用来存储所有实例都需要的属性信息,不同实例的属性值可能会不同。5请解释类方法、实例属性及其区别。答:实例方法表示特定对象的行为,在声明时前面不加static修饰符,在使用时需要发送给一个类实例。类方法也称为静态方法,在方法声明时前面需加static修饰符,类方法表示具体实例中类对象的共有行为。区别:实例方法可以直接访问实例变量,调用实例方法,实例方法可以直接访问类变量,调用类方法;类方法可以直接调用类变量和类方法,
3、类方法不能直接调用实例变量和实例方法;6类的访问控制符有哪几种具体含义及其区别。答:类的访问控制符只有public(公共类)及无修饰符(默认类)两种。区别:当使用public修饰符时表示所有其他的类都可以使用此类;当没有修饰符时,则只有与此类处于同一包中的其他类可以使用类。7类成员的访问控制符有哪几种他们对类成员分别有哪些访问限制的作用答:类成员的访问控制符有 public,private,protecte及无修饰符. public(公有的):用public修饰的成分表示公有的,也就是它可以被其他任何对象访问(前提是对累成员所在的类访问有访问权限). Private(保护的):类中限定为pri
4、vate的成员只能被这个类本身访问,在类外不可见。proteced(保护的)用该关键字修饰的成分是受保护的,只可以被同一类及其子类的实例对象访问。 无修饰符(默认的):public,private,protected这个三个限定符不是必须写的。如果不写,则表明是“friendly”,相应的成分可以被所在保重的各类访问。 8简述构造方法的特点答:构造方法主要有以下特点:(1) 构造方法的方法名与类名相同;(2) 构造方法没有返回类型(修饰符void也不能有);(3) 构造方法通常被声明为公有的(public);(4) 构造方法可以有任意多个参数;(5) 构造方法的主要作用是完成对象的初始化工作;
5、(6) 构造方法不能在程序中显式的调用;(7) 在生成一个对象时,系统会自动调用该类的构造方法为新生成的对象初始化。9如果在类声明中声明了构造方法,系统是否还提供默认的构造方法答: 用户在进行类声明时,如果没有声明任何构造方法,系统会赋给此类一个默认(无参)的构造方法。但是,只要用户声明了构造方法,即使没有声明无参的构造方法,系统也不会再赋默认的构造方法。10:声明Patient类表示在门诊室中的病人。此类对象应包括()()、age(an integer)、weight(a float0、allergies(a boolean). 声明存取及修改方法。在一个单独的累中,声明测试方法,并生成两个
6、patient的例子: Atient april=new Patient(); (“zhangli”)(f);(330;(true);那么: ”+(); ”+(); ”+();(“weught: ”+(); ”+();声明并测试toString()方法显示一个病人的aga、sex、name及allergies属性。答:public class Patientprivate String name;private char sex;private int age;private float weight;private boolean allergies;public void setname(
7、String a)name=a;public void setsex(char b)sex=b;public void setage(int c)age=c;public void setweight(float d)weight=d;public void setallergies(boolean e)allergies=e;public String getname()return name;public char getsex()return sex;public int getage()return age;public float getweight()return weight;p
8、ublic boolean getallergies()return allergies;public class Textpublic static void main(String args)Patient april=new Patient();(ZhangLi);(f);(33);(154.72f);(true);Name: +();sex: +();age: +();weight: +();allergies: +();11:声明并测试一个复数类,其方法包括toString()及复数的加、减、乘运算。答:public class Complexprivate float a;priv
9、ate float b;public String toString()if(a!=0)return(a+i+b);else return(+b);public Complex(float a,float b)=a;=b;public void Add(Complex p)+=;+=;public void Decrease(Complex p)=;=;public void Multiply(Complex p)=*;=*;public class ComplexTexterpublic static void main(String args)Complex a=new Complex(2
10、,4); Complex b=new Complex(5,8);(b);n);(b);n);(b);n);12:什么是UML它由哪几部分组成答:UML是图形化()即可视化的建模语言,成为面向对象建模的标准语言。它由四部分组成:(1)视图(2)图(3)模型元素(4)通用机制13. 常用的类与类之间的关系有哪几种。答:有关联、依赖、流、泛化、实现、使用。14. 考虑学院、系及教员应该具有哪些属性,并画出它们之间关系的类图。 第三章课后习题答案1.设N为自然数:n!=1*2*3*.*n称为n的阶乘,并且规定0!=1.试编程计算2!,4!,6!he 10!.并将结果输出到屏幕上。答: public c
11、lass Mulpublic static void main(String args)int i,n;float s;for(n=0;n=10;n=n+2)if(n=0)0!=1n);elses=1;for(i=1;i=n;i+)s=s*i;!=+s+n);2.编写程序,接收用户从键键盘上输入的三个整数x,y,z.从中选出最大和最小者,并编程实现。答:public class Mathpublic static void main(String args)int IntArg = new int;for(int i=0;iIntArg1IntArg0:IntArg1;max=maxIntAr
12、g2max:IntArg2;min=IntArg0IntArg1IntArg0:IntArg1;min=minIntArg2min:IntArg2;max=+max);min=+min);3.求出100一枚的宿舍,并将这些数在屏幕上5个乙杭地显示出来。答:public class Supublic static void main(String args)int n,i,k=0,y;for(n=2;n=100;n+)y=1;for(i=2;in;i+)if(n%i=0)y=0;break;if(y=1)k+; );if(k%5=0)n);4.使用类,生成100个0-99之间的随机整数,找出他们
13、之中的最大值和最小值,并统计大于50的整数个数。public class Random public static void main(String args) int MinNum,MaxNum,n=0; int array=new int100; array0=(int)()*100); MinNum=array0; MaxNum=array0; 数列为:); ); for(int i=0;i50) n+; if(arrayi=MaxNum) MaxNum=arrayi; if(arrayi=MinNum) MinNum=arrayi; ); MinNum=+MinNum); MaxNum
14、=+MaxNum); 大于50的整数个数有:+n);5.接收用户从键盘上输入的两个整数,求两个数的最大公约数和最小公倍数,并输出。public class Test2 public static void main(String args) int I = new int; for(int i=0;i;i+) Ii = (argsi); int m,n,temp,t; if(I0I1) temp=I0; I0=I1; I1=temp; m=I0; n=I1; t=m%n; while(t!=0) m=t; n=m; t=m%n; 两个数的最大公约数为:+n); 两个数的最小公倍数为:+I0*I
15、1/n); 6. 从键盘上输入一件物品的价格(范围在元.),假设用户支付了一张5元纸币,请列出一种找零的方案,使得纸币及硬币的个数最少。如元,应为两元一张、一元一张、五角一个、一角一个、五分一个、二分一个、一分一个。;public class Price public static void main(String args) enter a number); float a=(); int c=(int)(a*100); int b=500-c; 找零如下:); if(b/200!=0)张2元);b-=(b/200)*200;if(b/100!=0)张1元);b-=(b/100)*100;
16、if(b/50!=0)张5角);b-=(b/50)*50;if(b/20!=0)张2角);b-=(b/20)*20;if(b/10!=0)张1角);b-=(b/10)*10;if(b/5!=0)个5分);b-=(b/5)*5;if(b/2!=0)个2分);b-=(b/2)*2; if(b!=0)个1分); ;public class Keyboard static BufferedReader inputStream =new BufferedReader(new InputStreamReader); public static int getInteger() try return().t
17、rim().intValue(); catch(Exception e) (); return 0; public static String getString() try return(); catch(IOException e) return0; public static float getFloat() String s=; try BufferedReader in = new BufferedReader(new InputStreamReader); s=(); return(s); catch(IOException e) 输入非法!); return(0.0f); 运行结
18、果:7.什么是异常解释抛出、捕获的含义。答:异常又称为例外,是特殊的运行错误对象,在程序中可以强制编译器来处理程序运行中的发生的并非由程序本身所造成的错误;抛出异常:把生成异常对象并提交的过程称为抛出异常; 抛出异常是java中一个程序处理动作,检查异常时要么在方法中声明一个异常抛出,用try-catch语句捕获异常,并进行处理。8.简述Java的异常处理机制。答:java中声明了很多异常类,每个异常类都代表了一种运行错误,类中包含了该运行错误的信息和处理错误的方法等内容。每当java程序运行过程中发生一个可识别的运行错误时,即该错误有一个异常类与之相对应时,系统都会产生一个相应的该异常类的对
19、象,即产生一个异常。一旦一个异常对象产生了,系统中就一定有相应的机制来处理它,确保不会产生死机、死循环或其他对操作系统的损害,从而保证了整个程序运行的安全性。9.系统定义的异常与用户自定义的异常有何不同如何使用这两类异常答:系统定义的特定情况出现的问题,而此时用来对可能遇到的问题进行处理。用户定义的是自己觉得可能会出现问题时,需要处理的。这样避免程序中断或是出现未知错误。系统异常有两种一种是运行时异常,一种是普通异常,普通异常要求用户捕获或者抛出的,不补货或者抛出就会编译不通过。运行时异常编译可以通过,但是运行时才显露出来。 10.用户如何自定义异常编程实现一个用户自定义异常。(1)定义myt
20、estimport .*;public class mytestprivate static int quotient(int number,int denominator)throwsDivideByZeroExceptionif(denominator=0)throw new DivideByZeroException();return(number/denominator);public static void main(String args)int number1=0,number2=0, result=0;try输入第一个数字:);number1=().intValue();输入第
21、二个数字:);number2=().intValue();result=quotient(number1,number2);catch(NumberFormatException e)(-1);/+number2+=+result);(2)定义DivideByZeroExceptionpublic class DivideByZeroException extends ArithmeticExceptionpublic DivideByZeroException()super(除数不能为0!);(3)定义Keyboardimport .*;public class Keyboardstatic
22、 BufferedReader inputStream=new BufferedReader(new InputStreamReader);public static int getInteger()try return ().trim().intValue();catch(Exception e) (); return 0; public static String getString()try return(); catch(IOException e)return 0; 第四章课后习题答案1.子类将继承父类所有的属性和方法吗为什么答:不,子类不能直接访问从父类中继承的私有属性及方法,但可
23、以对公有及保护方法进行访问。2.方法的覆盖与方法的重载有何不同答:覆盖是运用在子类中实现与父类相同的功能,但采用不同的算法或公式;在名字相同的方法中,要做比父类更多的事情;在子类中需要取消从父类继承的方法。3.声明两个带有无参构造方法的两个类A和B,声明A的子类C,并且声明B为C的一个成员,不声明C 的构造方法。编写测试代码,生成类C的实例对象,并观察结果。明一个基类A,它只有一种非默认构造方法;声明A的子类B,B具有默认方法及非默认方法,并在B的构造方法中调用基类A的构造方法。明一个类,它具有一种方法,此方法被重载三次,派生一个新类,并增加一种新的重载方法,编写测试类验证四种方法对于派生类验
24、证四种方法对于派生类都有效。明一个具有final方法的类,声明一个派生类,并试图对这个方法进行重写,会有什么结果。明一个final类,并试图声明其派生类,会有什么结果。么是抽象类抽象类中是否一定要包括抽象方法答:抽象类是一个不完全的类,不能使用new方法进行实例化。抽象类可以包含抽象方法,也可以不包含抽象方法,但有抽象方法的必须是抽象类。和super分别有哪些特殊含义都有哪些种用法答:this 表示当前类;super 表示调用父类。在定义类的时候用到,this是当前对象的引用,super是当前对象的父类对象的引用,一般的都是把super用在构造函数中。10.完成下面父类及子类的声明:(1) 声
25、明Student类属性包括学号、姓名、英语成绩、数学成绩、计算机成绩和总成绩。方法包括构造方法、get方法、 set方法、toString方法、equals方法、compare方法(比较两个学生的总成绩,结果分为大于、小于、等于),sum方法(计算总成绩)和testScore方法(计算评测成绩)。注:评测成绩可以取三门课成绩的平均分,另外任何一门课的成绩的改变都需要对总成绩进行重新计算,因此,在每一个set方法中应调用sum方法计算总成绩。public class StudentString id;String name;float scoreOfenglish;float scoreOfma
26、th;float scoreOfcomputer;float scoreOfsum;public class test4_10public static void main(String args)Student su=new Student(001,苏轼,56.00f,87.00f,95.00f);Student du=new Student(002,杜甫,86.00f,75.00f,80.00f);Student bai=new Student(003,白居易,42.00f,77.00f,65.00f);Student liu=new Student(004,柳宗元,67.00f,67.0
27、0f,67.00f);StudentXW ou=new StudentXW(005,欧阳修,89.00f,98.00f,90.00f,数学代表);StudentXW wang=new StudentXW(006,王安石,98.00f,87.00f,36.00f,英语代表);StudentBZ li=new StudentBZ(007,李白,89.00f,87.00f,87.00f,班长);n评测成绩:+new DecimalFormat().format();n评测成绩:+new DecimalFormat().format();n评测成绩:+new DecimalFormat().forma
28、t();n评测成绩:+new DecimalFormat().format();n评测成绩:+new DecimalFormat().format();n评测成绩:+new DecimalFormat().format();n评测成绩:+new DecimalFormat().format();运行test4_10的结果如下:(很好玩吧,李白,我让你挂科。)11.包有什么作用如何创建包和引用包中的类答:包是一种松散的类的组合,一般不要求处于同一包中的类型有明确的相互关系,但由于同一包中的类在默认情况下可以相互访问,所以为了方便编程和管理,通常把需要在一起工作的类放在一个包里。利用包来管理类,可
29、实现类的共享与复用。在操作系统中,目录用来组织文件,设置权限。只要在要用到包中类的时候,在该引用类的第一行加上:package (包的全路径)即可。第五章课后习题答案1.什么是接口接口起什么作用接口与抽象类有何区别答:Java中的接口是一系列方法的声明,是一些方法特征的集合,一个接口只有方法的特征没有方法的实现,因此这些方法可以在不同的地方被不同的类实现,而这些实现可以具有不同的行为(功能)。作用:接口是面向对象的一个重要机制,使用接口可以实现多态继承;接口中的所有方法都是抽象的,这些抽象方法由实现这一接口的不同类型来具体;接口还可以用来实现不同类之间的常量共享。与抽象类不同的是:接口允许在看
30、起来不相干的类之间定义共同行为。2.试编程证明接口中的属性都隐含为static及final,所有的方法都为public。什么情况下,可以对父类对象的引用进行强制类型转换,使其转化成子类对象的引用答:一个对象被塑型为父类或接口后,可以再一次被塑型回到它原来所属的类,即转化成原类对象的引用。4.声明一个接口,此接口至少具有一个方法;在一个方法中声明内部类实现此接口,并返回此接口的引用。uck().fuck();运行结果:5.声明一个具有内部类的类,此内部类只有一个非默认的构造方法;声明另外一个具有内部类的类,此内部类继承第一个内部类。明一个具有两个方法的类,在第一个方法中调用第二个方法。声明此类的
31、一个子类,并在子类中重写第二个方法。生成一个子类的对象,并将其塑型为基类,调用第一个方法,解释会发生什么第4章习题10的基础上,声明测试类完成对多态性的测试。(1)在主方法中声明Student类的数组(含五个元素)(2)生成五个对象存入数组:其中三个Student类的对象、一个StudentXW类的对象、一个StudentBZ类的对象。(3)将方法testScore()发送给数组的每一个元素,输出结果,并分析具体执行的是哪一个类中的方法。;public class test5_8public static void main(String args)Student student=new St
32、udent(001,苏轼,56.00f,87.00f,95.00f),new Student(002,杜甫,86.00f,75.00f,80.00f),new Student(003,白居易,42.00f,77.00f,65.00f),new StudentXW(006,王安石,98.00f,87.00f,36.00f,英语代表),new StudentBZ(007,李白,89.00f,87.00f,87.00f,班长);for(int i=0;i5;i+)学生名字:+studenti.getname()+t评测成绩:+new DecimalFormat().format(studenti.t
33、estScore();运行结果:在主函数定义student数组的五个对象Student student5=new Student(),new Student(),new Student(),new StudentXW(),new StudentBZ()中,输出时,第1、2、3个调用的是Student中的方法,第4个调用的是StudentXW的方法,第5个调用的是StudentBZ的方法。第六章课后习题答案1.将本章例6-1至6-18中出现的文件的构造方法均改为使用File类对象作为参数实现。个人理解:File类只能对整文件性质进行处理,而没法通过自己直接使用()或者是()类似方法对文件内容进行
34、写或者读取。注意:是直接;下面只提供一个例2变化,其他的你自己做,10几道啊,出这题的人真他妈有病。import .*;public class test6_2public static void main(String args) throws IOException String fileName = D:;File writer=new File(fileName);();BufferedWriter input = new BufferedWriter(new FileWriter(writer);(Hello !n);(this is my first text file,n);(你
35、还好吗n);(); 运行结果:(电脑系统问题,没法换行,所以一般使用BuffereWriter中newLine()实现换行)2.模仿文本文件复制的例题,编写对二进制文件进行复制的程序.; class CopyMaker String sourceName, destName; BufferedInputStream source; BufferedOutputStream dest; int line; opy(s1, s2) 复制成功); else 复制失败); 运行前的两个文本:和(为空)运行后: 3.创建一存储若干随机整数的文本文件,文件名、整数的个数及范围均由键盘输入。;import
36、class memory private String name;private int count;private int Max;private int Min;public memory(String n,int c,int min,int max)=n;=c;=min;=max;public void startmemory()tryFileWriter out=new FileWriter(name);int limit=Max-Min;Random random = new Random();for (int i=1;i=count;i+)int number=Min+(limit
37、); );(number+ );();catch(IOException iox) 方法startmemory()有问题); ;import class test6_3 public static void main(String args) throws IOException别使用FileWriter和BufferedWriter往文件中写入10万个随机数,比较用时的多少。;public class fileWriter public static void main(String args) throws IOExceptionlong time = ();运行结果:;public cl
38、ass bufferedWriter public static void main(String args) throws IOExceptionlong time = ();运行结果:有用时可知: BufferedWriter比FileWriter写入的速度快, 当需要写入大量内容,前者效率高。5.生成一html文件,使其能显示2的幂次(09)的表格如下:Power of 2Value0112;public class test6_5public static void main(String args) throws IOExceptionBufferedWriter fuck =new
39、 BufferedWriter( new FileWriter();();();(Power of 2Value);for (int i=0;i=9;i+)(+i+(i, 2)+);();();();运行结果:6.用记事本程序创建一篇包含几十个英语单词的小文章,要求从屏幕输出每一个单词。;public class test6_6 public static void main(String args)throws IOException FileReader fr=new FileReader();int s;while(s=()!=-1)if(s=a& s=A & s=Z)else n);();运行结果:7.从键盘敲入一系列字母,将其存储到文件中,对其进行升序排序后,存储到另一个文件,并显示在屏幕上。;import class test6_7 建一个学生类(包括姓名、年龄、班级、密码),创建若干该类的对象并保存在文件中(密码不保存),从文件读取对象后显示在屏幕上。;public class tset6_8 public static void main(String args) throw
限制150内