Java核心技术习题答案马志强张然李雷孝编清华大学出版社目录第一章Java语言概述 (3)第二章 Java语法基础 (4)第三章面向对象编程 (15)第四章数组 (38)第五章高级类特性 (45)第六章 GUI编程 (51)第七章集合框架 (62)第九章集合框架 (77)第十章 IO流 (81)第十一章 JDBC访问数据库 (84)第十二章线程 (85)第十三章网络编程 (90)一、选择题1-5 ABBBB6-8 AAB二、填空题1. MyClass MyClass.class2. String数组(String[])一3. javac A.java java A三、程序设计题1、搭建Java运行环境,并写一个Java程序打印输出“开始学习Java程序设计!”。
1)首先安装JDK;2)配置环境变量path,classpath可配可不配;3)FirstJava.javapublic class HelloWorld{public static void main(String[] args){开始学习Java程序设计!");}}2、修改下面四个Java源文件中的错误,使其能够编译和运行。
Test1.java:TestAnother1类不能再使用public修饰,一个源文件中只能有一个类或者接口用public修饰;Test2.java:源文件中public修饰的类的名字为Testing2,和源文件名字不一致;Test3.java:Test3类的main方法的形参类型为String[];Test4.java:Test4类的main方法必须使用static关键字修饰。
一、选择题1-5 BCADB6-9 DCCC二、填空题1. abc ,a1, _abc, _1a, ab123#a,const,$abc,1abc,if,$#1sa,$_a,_$q12.题目出现问题:代码修改为 ch = (char) (ch+1);结果为’B’;如果直接结果为98。
3.true(真) false(假)4.45. 2 2 false 26.m*20/100 (double)m*20/100三、编程题1、由命令行输入一个成绩,使用switch结构求出成绩的等级。
A:90-100;B:80-89;C:70-79;D:60-69;E:0-59。
public class IfElseTest {public static void main(String[] args) {Scanner sc = new Scanner(System.in);int grade = sc.nextInt();if(grade<0 || grade>100){System.exit(0);}int temp =(int)Math.floor(grade/10);switch(temp){case 10:{break;}case 9:{break;}case 8:{break;}case 7:{break;}case 6:{break;}default:{break;}}}}2、计算圆周率:PI=4-4/3+4/5-4/7... ...;打印出第一个大于3.1415小于3.1416的值。
public class PITest{public static void main(String[] args){double result=0.0;for(int i=1;;i++){double m=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、……。
public class FibonacciTest{public static void main(String[] args){Scanner sn=new Scanner(System.in);int num=sn.nextInt();int i=1;int n1=1,n2=1;while(i<=num){if(i==1||i==2){n2=1;}else{int temp=n2;n2=n1+n2;n1=temp;}i++;}第"+num+"个值为:"+n2);}}4、计算多项式1-1/3+1/5-1/7+1/9......的值。
1)要求出前50项和值。
2)要求出最后一项绝对值小于1e-5的和值。
public class SumTest{public static void main(String[] args){double sum=0.0;for(int i=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);double item=0.0;int j=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个随机整数哪些是素数,哪些不是?public class PrimeTest {public static void main(String[] args) {PrimeTest t = new PrimeTest();for(int i=0;i<100;i++){int num = (int)(Math.random()*1000);if(t.isPrime(num)){是素数!");}else{不是素数!");}}}public boolean isPrime(int num){for(int i=2;i<=num/2;i++){if(num%i==0){第一个被"+i+"整除!");return false;}}return true;}}6、在屏幕上打印出n行的金字塔图案,如,若n=3,则图案如下:*********public class PrintStar{public static void main(String[] args){Scanner sn=new Scanner(System.in);int rows=sn.nextInt();for(int i=1;i<=rows;i++){for(int j=1;j<=rows-i;j++){}for(int k=1;k<=2*i-1;k++){}}}}7、歌德巴赫猜想,任何一个大于六的偶数可以拆分成两个质数的和,打印出所有的可能。
如输入10,结果为:10=5+5;10=3+7。
public class Gede {public static void main(String[] args) {int n = Integer.parseInt(args[0]);if(n<=6 || n%2!=0){错误的参数!");return;}Gede g = new Gede();//因为1不是素数,n-2是偶数,所以从3开始循环for(int i=3;i<=n/2;i++){if(i%2==0){continue;}if(g.isPrime(i) && g.isPrime(n-i)){}}}/*** 判断num是否是素数*/public boolean isPrime(int num){for(int i=2;i<=num/2;i++){if(num%i==0){return false;}}return true;}}四、实训题万年历的设计与实现。
本程序包含两个类CalenderModelA和TestCalenderModelA。
CalenderModelA实现了赛事日期设置等主要功能,程序文件CalenderModelA .java。
public class CalenderModelA{//计算从公元始的天数public int getNumberOfDay(int year, int month, int day){int total = 0;int limit = getTotalDaysOfMonth(year, month);if(day<=limit){for (int y = 1; y < year; y++){total += (this.isLeapYear(year) ? 366 : 365);}for (int m = 1; m < month; m++){total += (this.getTotalDaysOfMonth(year, month));}total+=day;return total;}else{您输入的日期非法");return -1;}}//打印万年历public void show(int year, int month){int total = 0;//计算从公元始到今年之前的总天数for (int y = 1; y < year; y++){total += (this.isLeapYear(y) ? 366 : 365);}//计算今年到本月前的总天数for (int m = 1; m < month; m++){total += (this.getTotalDaysOfMonth(year, m));}//计算本月1日是星期几total = total % 7;int d1 = (total + 1) % 7;int d2 = this.getTotalDaysOfMonth(year, month);年" + month + "月");String[] s = { "日", "一", "二", "三", "四", "五", "六" };for (int i = 0; i < 7; i++) {}for(int i=0;i<d1;i++){}//打印本月日历for (int i = d1,j=1; i < d1 + d2; i++,j++) {if((i+1)%7 == 0){}}}//判断是否为闰年public boolean isLeapYear(int year){return ((year%4 == 0) && (year % 100 != 0)) || (year % 400 == 0); }//计算某年某月天数public int getTotalDaysOfMonth(int year, int month){int total = 0;switch (month) {case 1:case 3:case 5:case 7:case 8:case 10:case 12:total = 31;break;case 2:total = this.isLeapYear(year) ? 29 : 28;break;case 4:case 6:case 9:case 11:total = 30;break;}return total;}}TestCalenderModelA实现main方法,具有输入大赛起始和终止日期,输出日历,并计算大赛周期的功能。