Java核心技术习题答案.docx
《Java核心技术习题答案.docx》由会员分享,可在线阅读,更多相关《Java核心技术习题答案.docx(72页珍藏版)》请在冰豆网上搜索。
Java核心技术习题答案
Java核心技术
习题答案
马志强张然李雷孝编
清华大学出版社
第一章Java语言概述3
第二章Java语法基础4
第三章面向对象编程15
第四章数组38
第五章高级类特性45
第六章GUI编程51
第七章集合框架62
第九章集合框架77
第十章IO流81
第十一章JDBC访问数据库84
第十二章线程85
第十三章网络编程90
第一章Java语言概述
一、选择题
1-5ABBBB
6-8AAB
二、填空题
1.MyClassMyClass.class
2.String数组(String[])一
3.javacA.javajavaA
三、程序设计题
1、搭建Java运行环境,并写一个Java程序打印输出“开始学习Java程序设计!
”。
1)首先安装JDK;
2)配置环境变量path,classpath可配可不配;
3)FirstJava.java
publicclassHelloWorld{
publicstaticvoidmain(String[]args){
开始学习Java程序设计!
");
}
}
2、修改下面四个Java源文件中的错误,使其能够编译和运行。
Test1.java:
TestAnother1类不能再使用public修饰,一个源文件中只能有一个类或者接口用public修饰;
Test2.java:
源文件中public修饰的类的名字为Testing2,和源文件名字不一致;
Test3.java:
Test3类的main方法的形参类型为String[];
Test4.java:
Test4类的main方法必须使用static关键字修饰。
第二章Java语法基础
一、选择题
1-5BCADB
6-9DCCC
二、填空题
1.abc,a1,_abc,_1a,ab123
#a,const,$abc,1abc,if,$#1sa,$_a,_$q1
2.题目出现问题:
代码修改为ch=(char)(ch+1);结果为’B’;如果直接结果为98。
3.true(真)false(假)
4.4
5.22false2
6.m*20/100(double)m*20/100
三、编程题
1、由命令行输入一个成绩,使用switch结构求出成绩的等级。
A:
90-100;B:
80-89;C:
70-79;D:
60-69;E:
0-59。
publicclassIfElseTest{
publicstaticvoidmain(String[]args){
Scannersc=newScanner(System.in);
intgrade=sc.nextInt();
if(grade<0||grade>100){
System.exit(0);
}
inttemp=(int)Math.floor(grade/10);
switch(temp){
case10:
{
break;
}
case9:
{
break;
}
case8:
{
break;
}
case7:
{
break;
}
case6:
{
break;
}
default:
{
break;
}
}
}
}
2、计算圆周率:
PI=4-4/3+4/5-4/7......;打印出第一个大于3.1415小于3.1416的值。
publicclassPITest{
publicstaticvoidmain(String[]args){
doubleresult=0.0;
for(inti=1;;i++){
doublem=4.0/(2*i-1);
if((i%2)==0){
result-=m;
}else{
result+=m;
}
if(result>3.1415&&result<3.1416){
break;
}
}
}
}
3、输入一个数据n,计算斐波那契数列(Fibonacci)的第n个值。
斐波那契数列:
1、1、2、3、5、8、13、21、34、……。
publicclassFibonacciTest{
publicstaticvoidmain(String[]args){
Scannersn=newScanner(System.in);
intnum=sn.nextInt();
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=0.0;
for(inti=1;i<=50;i++){
if(i%2==0){
sum=sum-1.0/(2*i-1);
}else{
sum=sum+1.0/(2*i-1);
}
}
前50项和值:
"+sum);
doubleitem=0.0;
intj=1;
sum=0.0;
while(item<0.00001){
item=1.0/(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)(Math.random()*1000);
if(t.isPrime(num)){
是素数!
");
}else{
不是素数!
");
}
}
}
publicbooleanisPrime(intnum){
for(inti=2;i<=num/2;i++){
if(num%i==0){
第一个被"+i+"整除!
");
returnfalse;
}
}
returntrue;
}
}
6、在屏幕上打印出n行的金字塔图案,如,若n=3,则图案如下:
*
***
*****
publicclassPrintStar{
publicstaticvoidmain(String[]args){
Scannersn=newScanner(System.in);
introws=sn.nextInt();
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=Integer.parseInt(args[0]);
if(n<=6||n%2!
=0){
错误的参数!
");
return;
}
Gedeg=newGede();
//因为1不是素数,n-2是偶数,所以从3开始循环
for(inti=3;i<=n/2;i++){
if(i%2==0){
continue;
}
if(g.isPrime(i)&&g.isPrime(n-i)){
}
}
}
/**
*判断num是否是素数
*/
publicbooleanisPrime(intnum){
for(inti=2;i<=num/2;i++){
if(num%i==0){
returnfalse;
}
}
returntrue;
}
}
四、实训题
万年历的设计与实现。
本程序包含两个类CalenderModelA和TestCalenderModelA。
CalenderModelA实现了赛事日期设置等主要功能,程序文件CalenderModelA.java。
publicclassCalenderModelA
{
//计算从公元始的天数
publicintgetNumberOfDay(intyear,intmonth,intday)
{
inttotal=0;
intlimit=getTotalDaysOfMonth(year,month);
if(day<=limit)
{
for(inty=1;y{
total+=(this.isLeapYear(year)?
366:
365);
}
for(intm=1;m{
total+=(this.getTotalDaysOfMonth(year,month));
}
total+=day;
returntotal;
}
else
{
您输入的日期非法");
return-1;
}
}
//打印万年历
publicvoidshow(intyear,intmonth)
{
inttotal=0;
//计算从公元始到今年之前的总天数
for(inty=1;y{
total+=(this.isLeapYear(y)?
366:
365);
}
//计算今年到本月前的总天数
for(intm=1;m{
total+=(this.getTotalDaysOfMonth(year,m));
}
//计算本月1日是星期几
total=total%7;
intd1=(total+1)%7;
intd2=this.getTotalDaysOfMonth(year,month);
年"+month+"月");
String[]s={"日","一","二","三","四","五","六"};
for(inti=0;i<7;i++){
}
for(inti=0;i}
//打印本月日历
for(inti=d1,j=1;iif((i+1)%7==0){
}
}
}
//判断是否为闰年
publicbooleanisLeapYear(intyear)
{
return((year%4==0)&&(year%100!
=0))||(year%400==0);
}
//计算某年某月天数
publicintgetTotalDaysOfMonth(intyear,intmonth)
{
inttotal=0;
switch(month){
case1:
case3:
case5:
case7:
case8:
case10:
case12:
total=31;
break;
case2:
total=this.isLeapYear(year)?
29:
28;
break;
case4:
case6:
case9:
case11:
total=30;
break;
}
returntotal;
}
}
TestCalenderModelA实现main方法,具有输入大赛起始和终止日期,输出日历,并计算大赛周期的功能。
程序文件TestCalenderModelA.java。
publicclassTestCalenderModelA
{
publicstaticvoidmain(String[]args)
{
Scannerscan=newScanner(System.in);
请输入年份:
");
intyear=scan.nextInt();
请输入月份:
");
intmonth=scan.nextInt();
月历如下");
CalenderModelAtestBegin=newCalenderModelA();
testBegin.show(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;
4修改TeacherTest类,增加对教师增加薪水方法的调用,并将增加后的薪水值输出。
Teacher.java:
publicclassTeacher{
publicStringname;
publicintage;
publicdoublesalary;
publicStringgetName(){
returnname;
}
publicvoidsetName(Stringname){
this.name=name;
}
publicintgetAge(){
returnage;
}
publicvoidsetAge(intage){
this.age=age;
}
publicdoublegetSalary(){
returnsalary;
}
publicvoidsetSalary(doublesalary){
this.salary=salary;
}
publicTeacher(){
}
publicTeacher(Stringname,intage,doublesalary){
this.name=name;
this.age=age;
this.salary=salary;
}
publicvoidaddSalary(){
this.salary=this.salary+5000;
}
}
TeacherTest.java:
publicclassTeacherTest{
publicstaticvoidmain(String[]args){
Teacherteacher=newTeacher();
teacher.age=35;
teacher.name="zhangsan";
teacher.salary=1234.5;
teacher.addSalary();
}
}
3、定义一个Person类。
1包含以下属性:
Stringname;intage;booleangender;Personpartner。
2定义marry(Personp)方法,代表当前对象和p结婚,如若可以结婚,则输出恭贺信息,否则输出不能结婚原因。
下列情况不能结婚:
结婚年龄,男<24,女<22;3,某一方已婚。
3定义测试类,来测试以上程序。
publicclassPerson{
privateStringname;
privateintage;
privatebooleangender;
Personpartner;
publicPerson(Stringname,intage,booleangender,Personpartner){
this.name=name;
this.age=age;
this.gender=gender;
this.partner=partner;
}
publicvoidmarry(Personp){
if(this.gender==p.gender){
同性不能结婚!
");
return;
}
if((this.gender==true&&this.age<24)||(this.gender==false&&this.age<22)
||(p.gender==true&&p.age<24)||(p.gender==false&&p.age<22)){
没有达到结婚年龄!
");
return;
}
if(this.partner!
=null||p.partner!
=null){
有一方已经结婚!
");
return;
}
祝你们新婚愉快!
");
this.partner=p;
p.partner=this;
}
publicstaticvoidmain(String[]args){
Personp1=newPerson("关之琳",23,false,null);
Personp2=newPerson("刘德华",26,true,null);
Personp3=newPerson("孙楠",70,true,null);
p1.marry(p2);
p1.marry(p3);
}
}
4、定义一个Animal类,该类有两个私有属性,name(代表动物的名字)和legs(代表动物的腿的条数)。
1两个构造方法,一个无参,默认给name赋值为AAA,给legs赋值为4;另一个需要两个参数,分别用这两个参数给私有属性赋值。
2两个重载的move()方法,其中一个无参,在屏幕上输出一行文字:
XXXMoving!
!
(XXX为该动物的名字);另一个需要一个int参数n,在屏幕上输出n次XXXMoving!
!
publicclassAnimal1{
privateStringname;
privateintlegs;
publicAnimal1(){
this.name="AAA";
this.legs=4;
}
publicAnimal1(Stringname,intlegs){
super();
this.name=name;
this.legs=legs;
}
publicStringgetName(){
returnname;
}
publicvoidsetName(Stringname){
this.name=name;
}
publicintgetLegs(){
returnlegs;
}
publicvoidsetLegs(intlegs){
this.legs=legs;
}
publicvoidmove(){
}
publicvoidmove(intn){
inti=1;
while(i<=n){
i++;
}
}
}
5、定义一个Fish类,继承自Animal类。
1提供一个构造方法,该构造方法需要一个参数name,并给legs赋默认值0;
2覆盖Animal类中的无参move()方法,要求输出:
XXXSwimming!
!
publicclassFishextendsAnimal{
privateStringname;
privateintlegs;
publicFish(Stringname){
this.name=name;
this.legs=0;
}
publicvoidmove(){
}
}
publicclassBirdextendsAnimal{
privateStringname;
privateintlegs;
publicBird(Stringname){
this.name=name;
this.legs=2;
}
publicvoidmove(){
}
}
6、写一个类Zoo,要求分别生成若干个Animal、Fish和Bird。
并调用他们的属性和方法。
publicclassZoo{
publicstaticvoidmain(String[]args){
Animala=newAnima