if(n%i==0)
{y=0;break;}
if(y==1){
k++;
"");
if(k%5==0)
"\n");
}
}
}
}
4.使用类,生成100个0---99之间的随机整数,找出他们之中的最大值和最小值,并统计大于50的整数个数。
publicclassRandom{
publicstaticvoidmain(String[]args)
{
intMinNum,MaxNum,n=0;
int[]array=newint[100];
array[0]=(int)()*100);
MinNum=array[0];
MaxNum=array[0];
"数列为:
");
"");
for(inti=0;i<100;i++)
{
array[i]=(int)()*100);
if(array[i]>50)
n++;
if(array[i]>=MaxNum)
MaxNum=array[i];
if(array[i]<=MinNum)
MinNum=array[i];
"");
}
"MinNum="+MinNum);
"MaxNum="+MaxNum);
"大于50的整数个数有:
"+n);
}
}
5.接收用户从键盘上输入的两个整数,求两个数的最大公约数和最小公倍数,并输出。
publicclassTest2
{
publicstaticvoidmain(String[]args)
{
int[]I=newint[];
for(inti=0;i<;i++){
I[i]=(args[i]);
}
intm,n,temp,t;
if(I[0]
{
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;
}
"两个数的最大公约数为:
"+n);
"两个数的最小公倍数为:
"+I[0]*I[1]/n);
}
}
6.从键盘上输入一件物品的价格(范围在~元.),假设用户支付了一张5元纸币,请列出一种找零的方案,使得纸币及硬币的个数最少。
如元,应为两元一张、一元一张、五角一个、一角一个、五分一个、二分一个、一分一个。
;
publicclassPrice{
publicstaticvoidmain(Stringargs[]){
"enteranumber");
floata=();
intc=(int)(a*100);
intb=500-c;
"找零如下:
");
if(b/200!
=0){"张2元");b-=(b/200)*200;}
if(b/100!
=0){"张1元");b-=(b/100)*100;}
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分");
}
}
;
publicclassKeyboard{
staticBufferedReaderinputStream=newBufferedReader(newInputStreamReader);
publicstaticintgetInteger(){
try{
return().trim()).intValue());
}catch(Exceptione){
();
return0;
}
}
publicstaticStringgetString(){
try{
return());
}catch(IOExceptione){
return"0";
}
}
publicstaticfloatgetFloat(){
Strings="";
try{
BufferedReaderin=newBufferedReader(newInputStreamReader);
s=();
return(s));
}
catch(IOExceptione)
{
"输入非法!
");
return(0.0f);
}
}
}
运行结果:
7.什么是异常?
解释抛出、捕获的含义。
答:
异常又称为例外,是特殊的运行错误对象,在程序中可以强制编译器来处理程序运行中的发生的并非由程序本身所造成的错误;
抛出异常:
把生成异常对象并提交的过程称为抛出异常;
抛出异常是java中一个程序处理动作,检查异常时要么在方法中声明一个异常抛出,用try-catch语句捕获异常,并进行处理。
8.简述Java的异常处理机制。
答:
java中声明了很多异常类,每个异常类都代表了一种运行错误,类中包含了该运行错误的信息和处理错误的方法等内容。
每当java程序运行过程中发生一个可识别的运行错误时,即该错误有一个异常类与之相对应时,系统都会产生一个相应的该异常类的对象,即产生一个异常。
一旦一个异常对象产生了,系统中就一定有相应的机制来处理它,确保不会产生死机、死循环或其他对操作系统的损害,从而保证了整个程序运行的安全性。
9.系统定义的异常与用户自定义的异常有何不同?
如何使用这两类异常?
答:
系统定义的特定情况出现的问题,而此时用来对可能遇到的问题进行处理。
用户定义的是自己觉得可能会出现问题时,需要处理的。
这样避免程序中断或是出现未知错误。
系统异常有两种一种是运行时异常,一种是普通异常,普通异常要求用户捕获或者抛出的,不补货或者抛出就会编译不通过。
运行时异常编译可以通过,但是运行时才显露出来。
10.用户如何自定义异常?
编程实现一个用户自定义异常。
(1)定义mytest
import.*;
publicclassmytest{
privatestaticintquotient(intnumber,intdenominator)throws
DivideByZeroException{
if(denominator==0)
thrownewDivideByZeroException();
return(number/denominator);
}
publicstaticvoidmain(Stringargs[]){
intnumber1=0,number2=0,result=0;
try{
"输入第一个数字:
");
number1=()).intValue();
"输入第二个数字:
");
number2=()).intValue();
result=quotient(number1,number2);
}
catch(NumberFormatExceptione){
(-1);
}
"/"+number2+"="+result);
}
}
(2)定义DivideByZeroException
publicclassDivideByZeroExceptionextendsArithmeticException{
publicDivideByZeroException(){
super("除数不能为0!
");
}
}
(3)定义Keyboard
import.*;
publicclassKeyboard{
staticBufferedReaderinputStream=newBufferedReader(newInputStreamReader);
publicstaticintgetInteger(){
try{
return().trim()).intValue());
}catch(Exceptione){
();
return0;
}
}
publicstaticStringgetString(){
try{
return());
}catch(IOExceptione){return"0";}
}
}
第四章课后习题答案
1.子类将继承父类所有的属性和方法吗?
为什么?
答:
不,子类不能直接访问从父类中继承的私有属性及方法,但可以对公有及保护方法进行访问。
2.方法的覆盖与方法的重载有何不同?
答:
覆盖是运用在子类中实现与父类相同的功能,但采用不同的算法或公式;在名字相同的方法中,要做比父类更多的事情;在子类中需要取消从父类继承的方法。
3.声明两个带有无参构造方法的两个类A和B,声明A的子类C,并且声明B为C的一个成员,不声明C的构造方法。
编写测试代码,生成类C的实例对象,并观察结果。
明一个基类A,它只有一种非默认构造方法;声明A的子类B,B具有默认方法及非默认方法,并在B的构造方法中调用基类A的构造方法。
明一个类,它具有一种方法,此方法被重载三次,派生一个新类,并增加一种新的重载方法,编写测试类验证四种方法对于派生类验证四种方法对于派生类都有效。
明一个具有final方法的类,声明一个派生类,并试图对这个方法进行重写,会有什么结果。
明一个final类,并试图声明其派生类,会有什么结果。
么是抽象类?
抽象类中是否一定要包括抽象方法?
答:
抽象类是一个不完全的类,不能使用new方法进行实例化。
抽象类可以包含抽象方法,也可以不包含抽象方法,但有抽象方法的必须是抽象类。
和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;
;
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,"班长");
"\n评测成绩:
"+newDecimalFormat("").format()));
"\n评测成绩:
"+newDecimalFormat("").format()));
"\n评测成绩:
"+newDecimalFormat("").format()));
"\n评测成绩:
"+newDecimalFormat("").format()));
"\n评测成绩:
"+newDecimalFormat("").format()));
"\n评测成绩:
"+newDecimalFormat("").format()));
"\n评测成绩:
"+newDecimalFormat("").format()));
}
}
运行test4_10的结果如下:
(很好玩吧,李白,我让你挂科。
)
11.包有什么作用?
如何创建包和引用包中的类?
答:
包是一种松散的类的组合,一般不要求处于同一包中的类型有明确的相互关系,但由于同一包中的类在默认情况下可以相互访问,所以为了方便编程和管理,通常把需要在一起工作的类放在一个包里。
利用包来管理类,可实现类的共享与复用。
在操作系统中,目录用来组织文件,设置权限。