Java核心技术习题答案.docx
《Java核心技术习题答案.docx》由会员分享,可在线阅读,更多相关《Java核心技术习题答案.docx(44页珍藏版)》请在冰豆网上搜索。
Java核心技术习题答案
Java核心技术
习题答案
马志强张然李雷孝编
清华大学出版社
第一章Java语言概述3
第二章Java语法基础4
第三章面向对象编程11
第四章数组25
第五章高级类特性26
第六章GUI编程26
第七章集合框架29
第九章集合框架42
第十章IO流46
第十一章JDBC访问数据库46
第十二章线程48
第十三章网络编程53
第一章Java语言概述
一、选择题
1-5ABBBB
6-8AAB
二、填空题
1.MyClass
2.String数组(String[])一
3.javacjavaA
三、程序设计题
1、搭建Java运行环境,并写一个Java程序打印输出“开始学习Java程序设计!
”。
1)首先安装JDK;
2)配置环境变量path,classpath可配可不配;
3)
publicclassHelloWorld{
publicstaticvoidmain(String[]args){
"开始学习Java程序设计!
");
}
}
2、修改下面四个Java源文件中的错误,使其能够编译和运行。
:
TestAnother1类不能再使用public修饰,一个源文件中只能有一个类或者接口用public修饰;
:
源文件中public修饰的类的名字为Testing2,和源文件名字不一致;:
Test3类的main方法的形参类型为String[];
:
Test4类的main方法必须使用static关键字修饰。
第二章Java语法基础
选择题
1-5BCADB
6-9DCCC
填空题
1.abc,al,_abc,_1a,ab123
#a,const,$abc,1abc,if,$#1sa,$_a,_$q1
2.题目出现问题:
代码修改为ch=(char)(ch+1);结果为’B';如果直
接结果为98。
(真)false(假)
5.22false2
*20/100(double)m*20/100
三、编程题
1、由命令行输入一个成绩,使用switch结构求出成绩的等级。
A:
90-100;
B:
80-89;C:
70-79;D:
60-69;E:
0-59。
importclassIfElseTest{
publicstaticvoidmain(String[]args){
Scannersc=newScanner;
intgrade=();
if(grade<0||grade>100){
"aaaa");
(0);
}
inttemp=(int)(grade/10);
switch(temp){
case10:
{
"A");break;
}
case9:
{
"A");
break;
}
case8:
{
"B");
break;
}case7:
{
break;
}
case6:
{
"D");
break;
}
default:
{
"E");break;
}
;打印出第一个大于小于的值。
2、计算圆周率:
PI=4-4/3+4/5-4/7……
doubleresult=;for(inti=1;;i++){
doublem=(2*i-1);
if((i%2)==0){result-=m;
}else{result+=m;
}
if(result>&&result<{"result:
"+result);break;
}
}
}
}
3、输入一个数据n,计算斐波那契数列(Fibonacci)的第n个值。
斐波那契数列:
1、1、2、3、5、8、13、21、34、……。
importclassFibonacciTest{
publicstaticvoidmain(String[]args){
Scannersn=newScanner;
intnum=();
inti=1;
intn1=1,n2=1;
while(i<=num){
if(i==1||i==2){
n2=1;
}else{
inttemp=n2;
n2=n1+n2;
n1=temp;
}
i++;
}
"第"+num+"个值为:
"+n2);
}
}
4、计算多项式1-1/3+1/5-1/7+1/9的值。
1)要求出前50项和值。
2)要求出最后一项绝对值小于1e-5的和值
publicclassSumTest{
publicstaticvoidmain(String[]args){
doublesum=;
for(inti=1;i<=50;i++){
if(i%2==0){
sum=(2*i-1);
}else{
sum=sum+(2*i-1);
}
}
"前50项和值:
"+sum);
doubleitem=;
intj=1;
sum=;
while(item<{
item=(2*j-1);
if(j%2==0){
sum-=item;
}else{
sum+=item;
}
j++;
"最后一项绝对值小于1e-5的和值:
"+sum);
}
}
5、产生100个0-999之间的随机整数,然后判断这100个随机整数哪些是素数,哪些不是
publicclassPrimeTest{
publicstaticvoidmain(String[]args){
PrimeTestt=newPrimeTest();for(inti=0;i<100;i++){intnum=(int)()*1000);if(num)){
"是素数!
");
}else{
"不是素数!
");
}
}
}
publicbooleanisPrime(intnum){
for(inti=2;i<=num/2;i++){
if(num%i==0){
"第一个被"+i+"整除!
");returnfalse;
}
}
returntrue;
}
}
6在屏幕上打印出n行的金字塔图案,如,若n=3,贝昭案如下:
*****
importclassPrintStar{
publicstaticvoidmain(String[]args){Scannersn=newScanner;introws=();
for(inti=1;i<=rows;i++){
for(intj=1;j<=rows-i;j++){"");
}
for(intk=1;k<=2*i-1;k++){"*");
}
}
}
}
7、歌德巴赫猜想,任何一个大于六的偶数可以拆分成两个质数的和,打印出所有的可能。
如输入10,结果为:
10=5+5;10=3+7。
publicclassGede{
publicstaticvoidmain(String[]args){
intn=(args[0]);
if(n<=6||n%2!
=0){
"错误的参数!
");return;
}
Gedeg=newGede();ava。
publicclassCalenderModelA
{
ava。
importclassTestCalenderModelA
{
publicstaticvoidmain(String[]args)
{
Scannerscan=newScanner;
"请输入年份:
");
intyear=();
"请输入月份:
");intmonth=();
"月历如下");
CalenderModelAtestBegin=newCalenderModelA();(year,month);
}
第三章面向对象编程
一、选择题
1-5CABDD
2-10DCCBC
11-12CC
二、填空题
1.Packagemypackage;
2.final
3.Object
4.packageimportclass
5.c
三、程序设计题
2、按下列要求编写程序:
1创建Teacher类
要求:
Teacher类要描述姓名、年龄、薪水,类型分别为String、int、double
2创建TeacherTest类要求:
在TeacherTest类中创建Teacher的对象;为该对象的属性(姓名、性别、年龄)赋值;将该对象的属性(姓名、性别、年龄)输出;
3为Teacher类添加一个方法,用于在教师原有薪水的基础上增加5000;④修改TeacherTest类,增加对教师增加薪水方法的调用,并将增加后的薪水值输出。
publicclassTeacher{publicStringname;
publicintage;
publicdoublesalary;
publicStringgetName(){
returnname;
publicvoidsetName(Stringname){
=name;
}publicintgetAge(){returnage;
}publicvoidsetAge(intage){
=age;
}publicdoublegetSalary(){
returnsalary;
}
publicvoidsetSalary(doublesalary){
=salary;
}publicTeacher(){
}
publicTeacher(Stringname,intage,doublesalary){=name;
=age;=salary;
}publicvoidaddSalary(){
=+5000;
}
}
publicclassTeacherTest{
publicstaticvoidmain(String[]args){
Teacherteacher=newTeacher();=35;
="zhangsan";
();
}
}
3、定义一个Person类。
1包含以下属性:
Stringname;intage;booleangender;Person
partner。
2定义marry(Personp)方法,代表当前对象和p结婚,如若可以结婚,则输出恭贺信息,否则输出不能结婚原因。
下列情况不能结婚:
结婚年龄,男<24,女<22;3,某一方已婚。
3定义测试类,来测试以上程序。
publicclassPerson{
privateStringname;
privateintage;
privatebooleangender;
Personpartner;
publicPerson(Stringname,intage,booleangender,Personpartner){
=name;
=age;
=gender;
=partner;
}
publicvoidmarry(Personp){
if=={
"同性不能结婚!
");
return;
if(==true&&<24)||==false&&<22)
||==true&&<24)||==false&&<22)){
"没有达到结婚年龄!
");
return;
}
if!
=null||!
=null){
"有一方已经结婚!
");
return;
}
","++","+"祝你们新婚愉快!
");
=p;
=this;
}
publicstaticvoidmain(String[]args){
Personp1=newPerson("关之琳",23,false,null);
Personp2=newPerson("刘德华",26,true,null);
Personp3=newPerson("孙楠",70,true,null);
(p2);
(p3);
}
}
4、定义一个Animal类,该类有两个私有属性,name(代表动物的名字)和
legs(代表动物的腿的条数)。
1两个构造方法,一个无参,默认给name赋值为AAA给legs赋值为4;
另一个需要两个参数,分别用这两个参数给私有属性赋值。
2两个重载的move()方法,其中一个无参,在屏幕上输出一行文字:
XXXMoving!
!
(XXX为该动物的名字);另一个需要一个int参数n,在屏幕上输出n次XXXMoving!
!
publicclassAnimal1{
privateStringname;
privateintlegs;
publicAnimal1(){
="AAA";
=4;
}
publicAnimal1(Stringname,intlegs){super();
=name;
=legs;
}
publicStringgetName(){
returnname;
}
publicvoidsetName(Stringname){
=name;
}
publicintgetLegs(){
returnlegs;
}
publicvoidsetLegs(intlegs){
=legs;
}
publicvoidmove(){
"Animalmoving!
");
}
publicvoidmove(intn){
inti=1;
while(i<=n){
"Animalmoving!
");i++;
}
5、定义一个Fish类,继承自Animal类。
name并给legs
XXXSwimming!
!
①提供一个构造方法,该构造方法需要一个参数赋默认值0;
②覆盖Animal类中的无参move()方法,要求输出:
publicclassFishextendsAnimal{
privateStringname;
privateintlegs;
publicFish(Stringname){
=name;
=0;
}
publicvoidmove(){
"Fishisswimming!
");
}
}
publicclassBirdextendsAnimal{
privateStringname;
privateintlegs;
publicBird(Stringname){
=name;
=2;
}
publicvoidmove(){
"Birdisflying!
");
}
}
6写一个类Zoo,要求分别生成若干个Animal、Fish和Bird。
并调用他们的属性和方法。
publicclassZoo{
publicstaticvoidmain(String[]args){
Animala=newAnimal("dog",4);
();
(3);
Fishf=newFish("smallfish");
();
Birdb=newBird("xique");
();
Animalaf=newFish("smallfish");
();
}
}
7、某公司的雇员分为以下若干类:
1Employee:
这是所有员工总的父类,属性:
员工的姓名,员工的生日月
份。
方法:
getSalary(intmonth)根据参数月份来确定工资,如果该月员工过生日,则公司会额外奖励100元。
2SalariedEmployee:
Employee的子类,拿固定工资的员工。
属性:
月薪;
3HourlyEmployee:
Employee的子类,按小时拿工资的员工,每月工作超
出160小时的部分按照倍工资发放。
属性:
每小时的工资、每月工作的小时数;
4SalesEmployee:
Employee的子类,销售人员,工资由月销售额和提成率决定。
属性:
月销售额、提成率。
5BasedPlusSalesEmployee:
SalesEmployee的子类,有固定底薪的销售人员,工资由底薪加上销售提成部分。
属性:
底薪。
写一个程序,把若干各种类型的员工放在一个Employee数组里,写一个函数,
打印出某月每个员工的工资数额。
注意:
要求把每个类都做成完全封装,不允许非私有化属性。
classEmployee{
privateStringname;
privateintmonth;
publicEmployee(Stringname,intmonth){
=name;
=month;
}
publicStringgetName(){
returnname;
}
publicdoublegetSalary(intmonth){
if==month){
return;
}
return;
}
}
classSalariedEmployeeextendsEmployee{
privatedoublemonthSalary;
publicSalariedEmployee(Stringname,int
monthSalary){
super(name,month);
=monthSalary;
}
publicdoublegetSalary(intmonth){
returnmonthSalary+(month);
}
}
classHourlyEmployeeextendsEmployee{
privateinthours;
privatedoublehourSalary;
publicHourlyEmployee(Stringname,intmonth,int
month,double
hours,double
hourSalary){
super(name,month);
=hours;=hourSalary;
}
publicdoublegetSalary(intmonth){doubleresult;
if(hours<=160){result=hours*hourSalary;
}else{result=160*hourSalary+(hours-160)**hourSalary;
}returnresult+(month);
}
}
classSalesEmployeeextendsEmployee{
privatedoublesalesCount;
privatedoublerate;
publicSalesEmployee(Stringname,intmonth,doublesalesCount,doublerate){
super(name,month);=salesCount;
=rate;
}
publicdoublegetSalary(intmonth){returnsalesCount*rate+(month);
}
}
classBasedPlusSalesEmployeeextendsSalesEmployee{
privatedoublebasedPlus;
publicBasedPlusSalesEmployee(Stringname,intmonth,doublesalesCount,doublerate,doublebasedPlus){
super(name,month,salesCount,rate);
=basedPlus;
}
publicdoublegetSalary(intmonth){
returnbasedPlus+(month);
}
}
publicclassEmployeeTest{
publicstaticvoidmain(String[]args){
Employee[]e=newEmployee[4];
e[0]=newSalariedEmployee("zhangsan",9,;
e[1]=newHourlyEmployee("lisi",5,230,;
e[2]=newSalesEmployee("wangwu",11,,;
e[3]=newBasedPlusSalesEmployee("zhaoliu",2,,,;for(inti=0;i<;i++){
""+"9月份的工资总额为:
"+e[i].getSalary(9));}
}
}
四、实训题
班级成绩管理系统实体类设计。
publicclassTest{
publicstaticvoidmain(String[]args){
Studentstu=newStudent("001","姚明");
("信息工程学院");
("软件工程");
("软件10-1");
Gradestugrade=newGrade();
("Web程序设计");
("2011-2012(下)");
().addGrade(stugrade);
stugrade=newGrade();ddGrade(stugrade);
stugrade=newGrade();ddGrade(stugrade);
stugrade=newGrade();ddGrade(stugrade);
stugrade=newGrade();ddGrade(stugrade);
stugrade=newGrade();ddGrade(stugrade);
stugrade=newGrade();ddGrade(stugrade);
stugrade=newGrade();ddGrade(stugrade);
("2011-2012(下)");
().sortByxq();
}
}
publicclassStudent{
publicstaticlongid=001l;
privateStringsid;
privateStringsname;
privateStringxueyuan;oString();
autoId();
grades=newGradeArray();
publicStudent(Stringsid){this(sid,null);
}
publicStudent(S