java核心技术习题答案0001_第1页
java核心技术习题答案0001_第2页
java核心技术习题答案0001_第3页
java核心技术习题答案0001_第4页
java核心技术习题答案0001_第5页
已阅读5页,还剩136页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

java核心技术习题答案HUAsystemofficeroom【HUA16H-TTMS2A-HUAS8Q8-HUAH1688】Java核心技术

习题答案马志强张然李雷孝编清华大学出版社目录TOC\o"1-5"\h\z第一章Java语言概述 3第二章Java语法基础 4第三章面向对象编程 15第四章数组 38第五章高级类特性 45第六章GUI编程 51第七章集合框架 62第九章集合框架 77第十章IO流 81第十^一章JDBC访问数据库 84第十二章线程 8590第十三章网络编程90第一章Java语言概述一、选择题1-5ABBBB6-8AAB二、填空题MyClassMyClass.classString数组(String口)一javacA.javajavaA三、程序设计题1、搭建Java运行环境,并写一个Java程序打印输出“开始学习Java程序设计!”。1)首先安装JDK;2)配置环境变量path,classpath可配可不配;3)FirstJava.javapublicclassHelloWorld{publicstaticvoidmain(String[]args){开始学习Java程序设计!〃);))2、修改下面四个Java源文件中的错误,使其能够编译和运行。Testl.java:TestAnotherl类不能再使用public修饰,一个源文件中只能有一个类或者接口用public修饰;Test2.java:源文件中public修饰的类的名字为Testing2,和源文件名字不一致;Test3.java:Test3类的main方法的形参类型为String口;Test4.java:Test4类的main方法必须使用static关键字修饰。第二章Java语法基础一、选择题1-5BCADB6-9DCCC二、填空题.abc,a1,_abc,_1a,ab123#a,const,$abc,1abc,if,$#1sa,$_a,_$q1.题目出现问题:代码修改为ch=(char)(ch+1);结果为’B’;如果直接结果为98。.true(真)false(假).4.22false2.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.f100r(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<year;y++)(total+=(this.isLeapYear(year)366:365);for(intm=1;m<month;m++)(total+=(this.getTotalDaysOfMonth(year,month));)total+=day;returntotal;)else(您输入的日期非法〃);return-1;))〃打印万年历publicvoidshow(intyear,intmonth)(inttotal=0;〃计算从公元始到今年之前的总天数for(inty=1;y<year;y++)(total+=(this.isLeapYear(y)366:365);)〃计算今年到本月前的总天数for(intm=1;m<month;m++)(total+=(this.getTotalDaysOfMonth(year,m));)〃计算本月1日是星期几total=total%7;intdl=(total+1)%7;intd2=this.getTotalDaysOfMonth(year,month);年“+month+〃月”);String口s={〃日〃,〃一〃,〃二〃,〃三〃,〃四〃,〃五〃,〃六〃};for(inti=0;i<7;i++){)for(inti=0;i<d1;i++){)〃打印本月日历for(inti=d1,j=1;i<dl+d2;i++,j++){if((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-5CABDD2-10DCCBC11-12CC二、填空题1.Packagemypackage?;2.final3.Object.packageimportclass.c三、程序设计题2、按下列要求编写程序:创建Teacher类double要求:Teacher类要描述姓名、年龄、薪水,类型分别为String、int、double创建TeacherTest类要求:在TeacherTest类中创建Teacher的对象;为该对象的属性(姓名、性别、年龄)赋值;将该对象的属性(姓名、性别、年龄)输出;为Teacher类添加一个方法,用于在教师原有薪水的基础上增加5000;修改TeacherTest类,增加对教师增加薪水方法的调用,并将增加后的薪水值输出。Teacher.java:publicclassTeacher{publicStringname;publicintage;publicdoublesalary;publicStringgetName(){returnname;)publicvoidsetName(Stringname){=name;)publicintgetAge(){returnage;)publicvoidsetAge(intage){this.age=age;)publicdoublegetSalary(){returnsalary;)publicvoidsetSalary(doublesalary){this.salary=salary;)publicTeacher(){)publicTeacher(Stringname,intage,doublesalary){=name;this.age=age;this.salary=salary;)publicvoidaddSalary(){this.salary=this.salary+5000;TeacherTest.java:publicclassTeacherTest{publicstaticvoidmain(String[]args){Teacherteacher=newTeacher();teacher.age=35;="zhangsan";teacher.salary=1234.5;teacher.addSalary();))3、定义一个Person类。包含以下属性:Stringname;intage;booleangender;Personpartner。定义marry(Personp)方法,代表当前对象和p结婚,如若可以结婚,则输出恭贺信息,否则输出不能结婚原因。下列情况不能结婚:结婚年龄,男<24,女<22;3,某一方已婚。定义测试类,来测试以上程序。publicclassPerson{privateStringname;privateintage;privatebooleangender;

Personpartner;publicPerson(Stringname,intage,booleangender,Personpartner){=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==falsethis.age<22)&&&&||(p.gender==true&&p.age<24) ||(p.gender==falsep.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(代表动物的腿的条数)。两个构造方法,一个无参,默认给name赋值为AAA,给legs赋值为4;另一个需要两个参数,分别用这两个参数给私有属性赋值。两个重载的move()方法,其中一个无参,在屏幕上输出一行文字:XXXMoving!!(XXX为该动物的名字);另一个需要一个int参数n,在屏幕上输出n次XXXMoving!!publicclassAnimal1{privateStringname;privateintlegs;publicAnimal1(){="AAA";this.legs=4;)publicAnimal1(Stringname,intlegs){super();=name;this.legs=legs;)publicStringgetName(){returnname;)publicvoidsetName(Stringname){=name;publicintgetLegs(){returnlegs;)publicvoidsetLegs(intlegs){this.legs=legs;)publicvoidmove(){)publicvoidmove(intn){inti=1;while(i<=n){i++;)))5、定义一个Fish类,继承自Animal类。① 提供一个构造方法,该构造方法需要一个参数name,并给legs赋默认值0;覆盖Animal类中的无参move()方法,要求输出:XXXSwimming!!publicclassFishextendsAnimal{privateStringname;privateintlegs;publicFish(Stringname){=name;this.legs=0;)publicvoidmove(){))publicclassBirdextendsAnimal{privateStringname;privateintlegs;publicBird(Stringname){=name;this.legs=2;)publicvoidmove(){)6、写一个类Zoo,要求分别生成若干个Animal、Fish和Bird。并调用他们的属性和方法。publicclassZoo{publicstaticvoidmain(String[]args){Animala=newAnimal("dog”,4);a.move();a.move(3);Fishf=newFish("smallfish");f.move();Birdb=newBird("xique");b.move();Animalaf=newFish("smallfish");af.move();))7、某公司的雇员分为以下若干类:Employee:这是所有员工总的父类,属性:员工的姓名,员工的生日月份。方法:getSalary(intmonth)根据参数月份来确定工资,如果该月员工过生日,则公司会额外奖励100元。SalariedEmployee:Employee的子类,拿固定工资的员工。属性:月薪;HourlyEmployee:Employee的子类,按小时拿工资的员工,每月工作超出160小时的部分按照1.5倍工资发放。属性:每小时的工资、每月工作的小时数;SalesEmployee:Employee的子类,销售人员,工资由月销售额和提成率决定。属性:月销售额、提成率。BasedPlusSalesEmployee:SalesEmployee的子类,有固定底薪的销售人员,工资由底薪加上销售提成部分。属性:底薪。写一个程序,把若干各种类型的员工放在一个Employee数组里,写一个函数,打印出某月每个员工的工资数额。注意:要求把每个类都做成完全封装,不允许非私有化属性。classEmployee{privateStringname;privateintmonth;publicEmployee(Stringname,intmonth){=name;this.month=month;)publicStringgetName(){returnname;publicdoublegetSalary(intmonth){if(this.month==month){return100.0;)return0.0;))classSalariedEmployeeextendsEmployee{privatedoublemonthSalary;publicSalariedEmployee(Stringname,intmonth,doublemonthSalary){super(name,month);this.monthSalary=monthSalary;)publicdoublegetSalary(intmonth){returnmonthSalary+super.getSalary(month);))classHourlyEmployeeextendsEmployee{privateinthours;privatedoublehourSalary;publicHourlyEmployee(Stringname,intmonth,inthours,doublehourSalary){super(name,month);this.hours=hours;this.hourSalary=hourSalary;)publicdoublegetSalary(intmonth){doubleresult;if(hours<=160){result=hours*hourSalary;}else(result=160*hourSalary+(hours-160)*1.5*hourSalary;)returnresult+super.getSalary(month);))classSalesEmployeeextendsEmployee{privatedoublesalesCount;privatedoublerate;publicSalesEmployee(Stringname,intmonth,doublesalesCount,doublerate){super(name,month);this.salesCount=salesCount;this.rate=rate;)publicdoublegetSalary(intmonth){returnsalesCount*rate+super.getSalary(month);))classBasedPlusSalesEmployeeextendsSalesEmployee{privatedoublebasedPlus;publicBasedPlusSalesEmployee(Stringname,intmonth,doublesalesCount,doublerate,doublebasedPlus){super(name,month,salesCount,rate);this.basedPlus=basedPlus;)publicdoublegetSalary(intmonth){returnbasedPlus+super.getSalary(month);))publicclassEmployeeTest{publicstaticvoidmain(String[]args){Employee[]e=newEmployee[4];e[0]=newSalariedEmployee("zhangsan”,9,3222.90);e[1]=newHourlyEmployee("lisi”,5,230,23.90);e[2]=newSalesEmployee("wangwu”,11,2330000.0,0.005);e[3]=newBasedPlusSalesEmployee("zhaoliu”,2,2000000.0,0.0001,3200.0);for(inti=0;i<e.length;i++){月份的工资总额为:〃+e[i].getSalary(9));)))四、实训题班级成绩管理系统实体类设计。publicclassTest{publicstaticvoidmain(String[]args){stu.setXueyuan(〃信息工程学院”);stu.setZhuanye(〃软件工程”);stu.setBanji(〃软件10-1");Gradestugrade=newGrade();stugrade.setKcm("Web程序设计”);stugrade.setXq(“2011-2012(下)“);stugrade.setCj(90.5f);stu.getGrades().addGrade(stugrade);stugrade=newGrade();〃加这一句的区别stugrade.setKcm("计算机网络”);stugrade.setXq(“2011-2012(上)”);stugrade.setCj(86.5f);stu.getGrades().addGrade(stugrade);stugrade=newGrade();〃加这一句的区别stugrade.setKcm("计算机组成原理”);stugrade.setXq(“2011-2012(上)”);stugrade.setCj(66.5f);stu.getGrades().addGrade(stugrade);stugrade=newGrade();〃加这一句的区别stugrade.setKcm(〃数据结构”);stugrade.setXq(“2010-2011(上)”);stugrade.setCj(76.5f);stu.getGrades().addGrade(stugrade);stugrade=newGrade();〃加这一句的区别stugrade.setKcm(〃数据库原理”);stugrade.setXq(“2010-2011(下)“);stugrade.setCj(76.5f);stu.getGrades().addGrade(stugrade);stugrade=newGrade();〃加这一句的区别stugrade.setKcm(〃高等数学(1)");stugrade.setXq(“2009-2010(上)”);stugrade.setCj(88.5f);stu.getGrades().addGrade(stugrade);stugrade=newGrade();〃加这一句的区别stugrade.setKcm(“高等数学(2)");stugrade.setXq(“2009-2010(下)“);stugrade.setCj(68.5f);stu.getGrades().addGrade(stugrade);stugrade=newGrade();〃加这一句的区别stugrade.setKcm(〃软件工程专业外语“);stugrade.setXq(“2011-2012(下)“);stugrade.setCj(88.0f);stu.getGrades().addGrade(stugrade);puteZc(“2011-2012(下)“);stu.getGrades().sortByxq();))publicclassStudent{privateStringsid;privateStringsname;privateStringxueyuan;〃先使用具体的字符串,然后转化成编码xyidprivateStringzhuanye;privateStringbanji;//privateGradeArraygrades;privateZcGradezcGrade;privatevoidautoId(){id++;)publicStudent(){sid=newLong(id).toString();autoId();grades=newGradeArray();)publicStudent(Stringsid){this(sid,null);)publicStudent(Stringsid,Stringsname){this(sid,sname,null);)publicStudent(Stringsid,Stringsname,Stringxueyuan){this.sid=sid;this.sname=sname;this.xueyuan=xueyuan;grades=newGradeArray();publicStringgetSid(){returnsid;)publicvoidsetSid(Stringsid){this.sid=sid;)publicStringgetSname(){returnsname;)publicvoidsetSname(Stringsname){this.sname=sname;)publicStringgetXueyuan(){returnxueyuan;)publicvoidsetXueyuan(Stringxueyuan){this.xueyuan=xueyuan;publicStringgetZhuanye(){returnzhuanye;)publicvoidsetZhuanye(Stringzhuanye){this.zhuanye=zhuanye;)publicStringgetBanji(){returnbanji;)publicvoidsetBanji(Stringbanji){this.banji=banji;)publicGradeArraygetGrades(){returngrades;)publicvoidsetGrades(GradeArraygrades){this.grades=grades;)publicZcGradegetZcGrade(){returnzcGrade;)publicvoidsetZcGrade(ZcGradezcGrade){this.zcGrade=zcGrade;)publicvoidcomputeZc(Stringxqid){zcGrade=newZcGrade(xqid);floatsum=0;for(inti=0;i<grades.getCurrent();i++){if(xqid.equals(grades.getGrade()[i].getXq())){

sum+=grades.getGrade()[i].getCj();))zcGrade.setZcresult(sum);)©Overridepublicbooleanequals(Objectobj){//TODOAuto-generatedmethodstubbooleanresult=false;if(obj!=null){if(objinstanceofStudent){Studenttemp=(Student)obj;if(sid.equals(temp.sid)){result=true;)))returnresult;)©OverridepublicStringtoString(){//TODOAuto-generatedmethodstubStringresult="{"+sid+"\r";/*for(KsGradetemp:grades.getGrade()){result+="[";result+=temp;result+=〃],〃}*/for(inti=0;i<grades.getCurrent();i++){result+="[";result+=grades.getGrade()[i];result+="]";result+="\r";)//result=result.substring(0,result.length()T);〃去掉最后一个逗号result+=zcGrade;result+="}";returnresult;))publicclassGrade{privateStringkcm;privateStringxq;privatefloatcj;publicGrade(){publicsuper();publicGrade(Stringkcm){this(kcm,null);)publicGrade(Stringkcm,Stringxq){this(kcm,xq,0.0f);)publicGrade(Stringkcm,Stringxq,floatcj){this.kcm=kcm;this.xq=xq;this.cj=cj;)publicfloatgetCj(){returncj;)publicvoidsetCj(floatcj){this.cj=cj;)publicStringgetKcm(){returnkcm;)publicvoidsetKcm(Stringkcm){this.kcm=kcm;)publicStringgetXq(){returnxq;)publicvoidsetXq(Stringxq){this.xq=xq;)©OverridepublicStringtoString(){//TODOAuto-generatedmethodstubreturnkcm+":"+xq+":"+cj;)©Overridepublicbooleanequals(Objectobj){//TODOAuto-generatedmethodstubbooleanresult=false;if(obj!=null){if(objinstanceofGrade){Gradetemp=(Grade)obj;if(kcm.equals(temp.kcm)){result=true;)))returnresult;))publicclassGradeArray{publicfinalstaticintKECHMENSHU=50;privateGrade[]grades=newGrade[KECHMENSHU];privateintcurrent=0;publicGradeArray(){super();publicintgetCurrent(){returncurrent;)publicvoidsetCurrent(intcurrent){this.current=current;)publicvoidaddGrade(Gradeg){〃存在问题:课程重复if(current<KECHMENSHU){if(!contain(g)){grades[current++]=g;)))publicGrade[]getGrade(){returngrades;)publicvoidsetGrade(Grade[]grade){this.grades=grade;privatebooleancontain(Gradeg){booleanresult=false;for(inti=0;i<current;i++){if(grades[i].equals(g)){result=true;break;))returnresult;)〃增加成绩的删除、修改〃按照学期排序课程publicvoidsortByxq(){〃冒泡排序for(inti=current-1;i>0;i--){for(intj=0;j<i;j++){if(grades[j].getXq().compareToIgnoreCase(grades[j+1].getXq())>0){Gradetemp=grades[j+1];grades[j+1]=grades[j];grades[j]=temp;)))))publicclassGradeListStack{/***@paramargs*/privateStack<Grade>gradelist;GradeListStack(){gradelist=newStack<Grade>();)publicvoidpush(Gradegrade){gradelist.push(grade);publicGradepop(){returngradelist.pop();)publicbooleanisEmpty(){returngradelist.empty();)publicStack<Grade>getGradelist(){returngradelist;)publicvoidsetGradelist(Stack<Grade>gradelist){this.gradelist=gradelist;)©OverridepublicStringtoString(){//TODOAuto-generatedmethodstubStringresult="{";while(!gradelist.isEmpty()){Gradegrade=gradelist.pop();result+="[";result+=grade.toString();result+="],";)result=result.substring(0,result.length()-1);result+="}";returnresult;)publicstaticvoidmain(String[]args){//TODOAuto-generatedmethodstubGradeListStackgradestack=newGradeListStack();Gradegrade=newGrade();grade.setKcm("Web程序设计”);grade.setXq("6");grade.setCj(88.0f);gradestack.push(grade);grade=newGrade();grade.setKcm("SQLServer数据库应用“);grade.setXq("6");grade.setCj(92.0f);gradestack.push(grade);))publicclassZcGrade{privateStringxq;privatefloatzcresult;publicZcGrade(){super();)publicZcGrade(Stringxq){this.xq=xq;)publicStringgetXqid(){returnxq;)publicvoidsetXqid(Stringxq){this.xq=xq;)publicfloatgetZcresult(){returnzcresult;)publicvoidsetZcresult(floatzcresult){this.zcresult=zcresult;)©OverridepublicStringtoString(){//TODOAuto-generatedmethodstubreturnxq+":"+zcresult;第四章数组一、选择题1-5ACCAA二、填空题1.sum=14.s=180.arr[i]<arr[j]arr[j]=arr[i]arr[i]=temp三、程序设计题(1)写一个类在其中定义一些方法实现数组元素的遍历、排序、插入、删除、查找。publicclassArrayTest{publicstaticvoidmain(String[]args){int口a={11,2,-3,54,115,36};int口b={110,-9,78,27,6,225,94,32,-12,1111,0};〃调用处理数组的方法

print(a);)〃遍历数组元素的方法publicvoidprint(int口a){for(inti=0;i<a.length;i++){))〃对数组元素进行排序的方法publicint口sort(int口a){for(inti=0;i<a.length-1;i++){for(intj=i+1;j<a.length;j++){if(a[i]<a[j]){inttemp=a[i];a[i]=a[j];a[j]=temp;)))returna;returna;〃找出数组中值最大的元素publicintmaxValue(int[]a){inttemp=a[0];for(inti=1;i<a.length;i++){if(temp<a[i])temp=a[i];)returntemp;)〃求数组元素的和publicintsum(int[]a){intsum=0;for(inti=0;i<a.length;i++){sum+=a[i];)returnsum;)〃将数组中的元素逆序排列publicint口reverse(int[]a){for(inti=0;i<a.length/2;i++){inttemp=a[i];a[i]=a[a.length-i-1];a[a.length-i-1]=temp;)returna;))(2)将一个数组中的元素倒排过来,不能新开一个数组的临时存储空间,只能在原数组上改。publicclassArrayReverse{publicint口reverse(int[]a){intlen=a.length;for(inti=0;i<len/2;i++){inttemp=a[i];a[i]=a[len-i-1];a[len-i-1]=temp;returna;)publicstaticvoidmain(String[]args){ArrayReversear=newArrayReverse();int口a={1,2,3,4,5,6,7,8,9,10};ar.reverse(a);for(inti=0;i<a.length;i++){)))(3)写一个类用来模拟栈这种数据结构,要求底层使用数组存储数据,并给出相应的进栈和出栈的方法。publicclassMyStack{int口arr;〃用于存放栈的数据intcount;〃元素个数publicMyStack(intsize){arr=newint[size];)publicvoidpush(intnum){if(count==arr.length){栈元素已满,〃+num+〃不能再添加!〃);return;)arr[count++]=num;)publicintpop(){if(count==0){栈为空,没有元素!〃);return-1;)intnum=arr[--count];returnnum;)publicvoidprint(){for(inti=count-1;i>=0;i--){))publicstaticvoidmain(String[]args){MyStackms=newMyStack(6);ms.pop();ms.push(10);ms.push(50);ms.push(80);ms.push(20);ms.push(340);ms.push(120);ms.push(69);ms.print();ms.pop();ms.pop();ms.print();))(4)实现在一个数组指定位置添加元素和删除元素的功能。提示:解答该题需要考虑如下问题①添加元素后超过数组容量时数组的扩展容量问题。添加元素前后数组中元素的变化。删除元素前后数组中元素的变化。publicclassArrayInsertDel{int口arr={20,18,12,39,23,100};intcount=6;publicvoidinsert(intpos,intnum){if(arr.length==count){expand();}for(inti=count;i>pos;i--){arr[i]=arr[i-1];}arr[pos]=num;count++;}publicvoiddelete(intpos){count--;for(inti=pos;i<=count;i++){arr[i]=arr[i+1];publicvoidprint(){for(inti=0;i<count;i++){))publicvoidexpand(){int口arr2=newint[arr.length*2];System.arraycopy(arr,0,arr2,0,arr.length);arr=arr2;)publicstaticvoidmain(String[]args){ArrayInsertDelaid=newArrayInsertDel();aid.print();aid.insert(3,110);aid.insert(5,119);aid.print();aid.delete(4);aid.print();第五章高级类特性一、选择题1-5ADACC6-7BD二、填空题一、一多二、抽象final三、abstractextendsnew四、不能三、程序设计题①建立一个动物的层次结构,以抽象类Animal为根,Cat、Spider和Fish动物类实现接口Pet。使用接口和抽象类技术完成。类结构如图5-6所示。完成:①创建Animal类,它是所有动物类的抽象父类②创建Spider类,继承Animal类③创建Pet接口④创建Cat类,继承Animal类并实现Pet接口⑤创建Fish类,继承Animal类并实现Pet接口⑥使用AnimalsTest类测试代码。图5-6类结构publicclassAnimalTest{publicstaticvoidmain(String口args){Animala;a=newSpider();a.walk();a.eat();a=newCat();a.walk();a.eat();Petp;p=newFish();p.setName("redfish");p.play();))abstractclassAnimal{protectedintlegs;protectedAnimal(intlegs){this.legs=legs;)publicvoidwalk(){)publicabstractvoideat();)interfacePet{voidsetName(Stringname);StringgetName();voidplay();)classSpiderextendsAnimal{publicSpider(){super(6);)publicvoideat(){))classCatextendsAnimalimplementsPet{privateStringname;publicCat(Stringname){super(4);=name;)publicCat(){super(4);publicvoidsetName(Stringname){=name;)publicStringgetName(){returnname;)publicvoidplay(){)publicvoideat(){))classFishextendsAnimalimplementsPet{privateStringname;publicFish(){super(0);)publicvoidsetName(Stringname){=name;publicStringgetName(){returnname;)publicvoidplay(){)publicvoideat(){)publicvoidwalk(){//super.walk();第六章GUI编程一、填空题ACCDBBB二、选择题l.GraphicalUserInterface.事件监听器.BorderLayout布局管理器.setFont四、实训题importimportimportimportimportimportimportimportimportpublicclassCalculatorextendsJFrameimplementsActionListener{/**计算器上的键的显示名字*/privatefinalString口KEYS={〃7〃,〃8〃,〃9〃,〃/〃,〃sqrt〃,〃4〃,〃5〃,〃6〃,〃*〃,〃%〃,〃1〃,〃2〃,〃3〃,〃-〃,〃1/x〃,〃0〃,〃+/-〃,〃.〃,〃+〃,〃=〃};/**计算器上的功能键的显示名字*/privatefinalString口COMMAND={〃Backspace〃,〃CE〃,〃C〃);/**计算器左边的M的显示名字*/privatefinalString[]M={〃〃,〃MC〃,〃MR〃,〃MS〃,〃M+〃};/**计算器上键的按钮*/privateJButtonkeys[]=newJButton[KEYS.length];/**计算器上的功能键的按钮*/privateJButtoncommands[]=newJButton[COMMAND.length];/**计算器左边的M的按钮*/privateJButtonm[]=newJButton[M.length];/**计算结果文本框*/privateJTextFieldresultText=newJTextField(〃0〃);//标志用户按的是否是整个表达式的第一个数字,或者是运算符后的第一个数字privatebooleanfirstDigit=true;//计算的中间结果。privatedoubleresultNum=0.0;//当前运算的运算符privateStringoperator=〃=〃;//操作是否合法privatebooleanoperateValidFlag=true;/***构造函数*/publicCalculator(){super();//初始化计算器init();//设置计算器的背景颜色this.setBackground(Color.LlGHT_GRAY);this.setTitle(〃计算器〃);〃在屏幕(500,300)坐标处显示计算器this.setLocation(500,300);//不许修改计算器的大小this.setResizable(false);〃使计算器中各组件大小合适this.pack();)/***初始化计算器*/privatevoidinit(){//文本框中的内容采用右对齐方式resultText.setHorizontalAlignment(JTextField.RIGHT);//不允许修改结果文本框resultText.setEditable(false);//设置文本框背景颜色为白色resultText.setBackground(Color.white);//初始化计算器上键的按钮,将键放在一个画板内JPanelcalckeysPanel=newJPanel();//用网格布局器,4行,5列的网格,网格之间的水平方向间隔为3个象素,垂直方向间隔为3个象素calckeysPanel.setLayout(newGridLayout(4,5,3,3));for(inti=0;i<KEYS.length;i++){keys[i]=newJButton(KEYS[i]);calckeysPanel.add(keys[i]);keys[i].setForeground(Color.blue);)//运算符键用红色标示,其他键用蓝色表示keys[3].setForeground(Color.red);keys[8].setForeground(Color.red);keys[13].setForeground(Color.red);keys[18].setForeground(Color.red);keys[19].setForeground(Color.red);//初始化功能键,都用红色标示。将功能键放在一个画板内JPanelcommandsPanel=newJPanel();//用网格布局器,1行,3列的网格,网格之间的水平方向间隔为3个象素,垂直方向间隔为3个象素commandsPanel.setLayout(newGridLayout(1,3,3,3));for(inti=0;i<COMMAND.length;i++){commands[i]=newJButton(COMMAND[i]);commandsPanel.add(commands[i]);commands[i].setForeground(Color.red);)//初始化M键,用红色标示,将M键放在一个画板内JPanelcalmsPanel=newJPanel();//用网格布局管理器,5行,1列的网格,网格之间的水平方向间隔为3个象素,垂直方向间隔为3个象素calmsPanel.setLayout(newGridLayout(5,1,3,3));for(inti=0;i<M.length;i++){m[i]=newJButton(M[i]);calmsPanel.add(m[i]);m[i].setForeground(Color.red);)//下面进行计算器的整体布局,将回生在和command画板放在计算器的中部,//将文本框放在北部,将calms画板放在计算器的西部。//新建一个大的画板,将上面建立的command和包坐在画板放在该画板内JPanelpanel1=newJPanel();//画板采用边界布局管理器,画板里组件之间的水平和垂直方向上间隔都为3象panel1.setLayout(newBorderLayout(3,3));panel1.add(〃North〃,commandsPanel);panel1.add(〃West〃,calckeysPanel);//建立一个画板放文本框JPaneltop=newJPanel();top.setLayout(newBorderLayout());top.add(〃Center〃,resultText);//整体布局getContentPane().setLayout(newBorderLayout(3,5));getContentPane().add(〃North〃,top);getContentPane().add(〃Center〃,panel1);getContentPane().add(〃West〃,calmsPanel);//为各按钮添加事件侦听器//都使用同一个事件侦听器,即本对象。本类的声明中有implementsActionListenerfor(inti=0;i<KEYS.length;i++){keys[i].addActionListener(this);)for(inti=0;i<COMMAND.length;i++){commands[i].addActionListener(this);for(inti=0;i<M.length;i++){m[i].addActionListener(this);))/***处理事件*/publicvoidactionPerformed(ActionEvente){//获取事件源的标签Stringlabel=e.getActionCommand();if(label.equals(COMMAND[0])){//用户按了〃Backspace〃键handleBackspace();}elseif(label.equals(COMMAND[1])){//用户按了'(£〃键resultText.setText(〃0〃);}elseif(label.equals(COMMAND[2])){//用户按了久〃键handleC();}elseif(.indexOf(label)>=0){//用户按了数字键或者小数点键handleNumber(label);//handlezero(zero);}else(//用户按了运算符键handleOperator(label);))/**处理Backspace键被按下的事件/privatevoidhandleBackspace(){Stringtext=resultText.getText();inti=text.length();if(i>0){//退格,将文本最后一个字符去掉text=text.substring(0,i-1);if(text.length()==0){//如果文本没有了内容,则初始化计算器的各种值resultText.setText(〃0〃);firstDigit=true;operator==;}else(//显示新的文本resultText.setText(text);)))/**处理数字键被按下的事件**@paramkey*/privatevoidhandleNumber(Stringkey){if(firstDigit){//输入的第一个数字resultText.setText(key);}elseif((key.equals(〃.〃))&&(resultText.getText().indexOf(〃.〃)<0))(//输入的是小数点,并且之前没有小数点,则将小数点附在结果文本框的后面resultText.setText(resultText.getText()+〃.〃);}elseif(!key.equals(〃.〃))(//如果输入的不是小数点,则将数字附在结果文本框的后面resultText.setText(resultText.getText()+key);)//以后输入的肯定不是第一个数字了firstDigit=false;)/**处理C键被按下的事件/privatevoidhandleC(){//初始化计算器的各种值resultText.setText(〃0〃);firstDigit=true;operator==;)/**处理运算符键被按下的事件*@paramkey/privatevoidhandleOperator(Stringkey){if(operator.equals(〃/〃))(//除法运算//如果当前结果文本框中的值等于0if(getNumberFromText()==0.0){//操作不合法operateValidFlag=false;resultText.setText(〃除数不能为零〃);}else(resultNum/=getNumberFromText();)}elseif(operator.equals(〃1/x〃))(//倒数运算if(resultNum==0.0){//操作不合法operateValidFlag=false;resultText.setText(〃零没有倒数〃);}else(resultNum=1/resultNum;)}elseif(operator.equals(〃+〃))(//加法运算resultNum+=getNumberFromText();}elseif(operator.equals(〃-〃))(//减法运算resultNum-=getNumberFromText();}elseif(operator.equals(〃*〃))(//乘法运算resultNum*=getNumberFromText();}elseif(operator.equals(〃sqrt〃))(//平方根运算resultNum=Math.sqrt(resultNum);}elseif(operator.equals(〃%〃))(//百分号运算,除以100resultNum=resultNum/100;}elseif(operator.equals(〃+/-〃))(//正数负数运算resultNum=resultNum*(-1);}elseif(operator.equals(〃=〃))(//赋值运算resultNum=getNumberFromText();)if(operateValidFlag){//双精度浮点数的运算longt1;doublet2;t1=(long)resultNum;t2=resultNum-t1;if(t2==0){resultText.setText(String.valueOf(t1));}else(resultText.setText(String.valueOf(resultNum));))//运算符等于用户按的按钮operator=key;firstDigit=true;operateValidFlag=true;)/**从结果文本框中获取数字*@return/privatedoublegetNumberFromText(){doubleresult=0;try(result=Double.valueOf(resultText.getText()).doubleValue();}catch(NumberFormatException

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论