Java实验练习题目-供练习参考.pdf
Java程序设计上机实验指导手册实验一 Java环境演练【目的】安装并配置J ava运行开发环境;掌握开发J ava应用程序的3 个步骤:编写源文件、编译源文件和运行应用程序;掌握开发J ava A p p l e t 程序的3 个步骤:编写源文件、编译源文件和运行J ava A p p l e t程序;学习同时编译多个J ava源文件。【内容】1.一个简单的应用程序令实验要求:编写一个简单的J ava应用程序,该程序在命令行窗口输出两行文字:“你好,很高兴学习J ava 和 W e are st ud e n t s。令程序运行效果示例:程序运行效果如下图所示:令程序模板:Hello.javapublic class Hello(public static void main(String args)(【代 码 1】命令行窗口输出”你好,很高兴学习Java”A a=new A();a.fA();)Iclass A(void fA()(代码2 命令行窗口输出 We are students1)令实验后的练习:1 .编译器怎样提示丢失大括号的错误?2 .编译器怎样提示语句丢失分号的错误?3 .编译器怎样提示将S y st e m 写成sy st e m 这一错误?4.编译器怎样提示将S t ri n g 写成st ri n g 这一错误?2.一个简单的Java Applet程序令实验要求:编写一个简单的J ava A p p l e t 程序,并在J ava A p p l e t 中写两行文字:“这是一个J ava A p p l e t 程序”和“我改变了字体”。程序运行效果示例:程序运行效果如下图所示:令程序模板:FirstApplet.javai m p o rt j ava,ap p l e t.*;i m p o rt j ava.aw t.*;p ubl i c cl ass F i rst A p p l e t e x t e n d s A p p l e t(p ubl i c vo i d p ai n t(G rap h i cs g)g.se t C o l o r(C o l o r,bl ue);【代码1 1 在J ava A p p l e t 中绘制一行文字:“这是一个J ava A p p l e t 程序”g.se t C o l o r(C o l o r,re d);g.se t F o n t (n e w F o n t (宋体”,F o n t.B O L D,3 6);【代码2】在J ava A p p l e t 中绘制一行文字:“我改变了字体”)今实验后的练习:5 .程序中的主类如果不用p ubl i c修饰,编译能通过吗?6 .程序中的主类如果不用p ubl i c修饰,程序能正确运行吗?7 .程序将p ai n t 方法误写成P ai n t,编译能通过么?8 .程序将p ai n t 方法误写成P ai n t,运行时能看到有关的输出信息吗?3.联合编译令实验要求:编写4 个源文件:H e l l o.j ava、A.j ava、B.j ava和C.j ava,每个源文件只有-个类,H e l l o,j ava是一个应用程序(含有m ai n 方 法),使用了A、B 和C 类。将4 个源文件保存到同一目录 中,例 如:C:1 0 0,然后编译H e l l o.j ava。令程序运行效果示例:程序运行效果如下图所示:令程序模板:模板 1:Hello.javap ubl i c cl ass M ai n C l assp ubl i c st at i c vo i d m ai n (S t ri n g arg s)【代码1】命令行窗口输出 你好、只需编译我”A a=new A();a.fA();B b=new B();b.fBO;)模板 2:A.javapublic class A(void fA()(【代码2】命令行窗口输出I am A”)模板 3:B.javapublic class B(void fB()(【代码3】命令行窗口输出I am B)模板 4:C.javapublic class C(void fC()【代码4】命令行窗口输出I am C1.令 实 验 后 的 练 习:9.将Hei lo.java编译通过后,不断修改A.java源文件中的代码,比如,在命令行窗口输出“我是A类”或“我被修改了”。要求每次修改A.java源文件后,单独编译A.java,然后直接运行应用程序Hell。10.如果需要编译某个目录下的全部Java源文件,比如C:1000目录,可以使用如下命令:c:1000javac*.java实验二 J ava基本数据类型与控制语句【目的】掌握char型数据和in t型数据之间的相互转换,同时了解unicode字符表;掌握使用if else i f 多分支语句;使用i fe 1 s e分支和wh i 1 e循环语句解决问题。【内容】1.输出希腊字母表。令 实验要求:编写一个Java应用程序,该程序在命令行窗口输出希腊字母表。令 程序运行效果示例:程序运行效果如下图所示:令程序模板:GreekAlphabet.javapublic class GreekAlphabet(public static void main(Siring args)(int startPosition=0,endPosition=0;char cStart=*a,cEnd=【代 码1】/cStart做int型转换据运算,并将结果赋值给startPosition【代码2】/cEnd做int型转换运算,并将结果赋值给endPositionSystem.out.println(希腊字母V。V在 Unicode 表中的顺序位置:+(int)c);System.out.println(希腊字母表:);for(int i=startPosition;i r ea lNu mb erw替 换【代码1】,可以么?2 .语句:“Sy s t em,o u t.p r i n t I n (“猜对了!”);为何要放在w h i le循环语句之后?放在w h i le语句的循环体中合理吗?实 验 三 类 与 对 象、继承【目的】使用类来封装对象的属性和功能;掌握类变量与实例变量,以及类方法与实例方法的区别;掌握使用p a c k a g e和i mp o r t 语句。巩固以下概念:子类的继承性子类对象的创建过程成员变量的继承与隐藏方法的继承与重写【内容】1.三角形、梯形和圆形的类封装令实验要求:编写一-个Ja v a 应用程序,该程序中有3个 类:T ra n g l e、L e d e r和C i rc l e,分别用来刻画“三角形”、“梯形”和“圆形”。具体要求如下:a)T ra n g l e 类具有类型为d o u b l e 的三个边,以及周长、面积属性,T ra n g l e类具有返回周长、面积以及修改三个边的功能。另外,T ra n g l e 类还具有一个b o o l e a n型的属性,该属性用来判断三个属能否构成一个三角形。b)L a d e r类具有类型d o u b l e 的上底、下底、高、面积属性,具有返回面积的功能。c)C i rc l e 类具有类型为d o u b l e 的半径、周长和面积属性,具有返回周长、面积的功能。令程序运行效果示例:程序运行效果如下图所示:令程序模板:AreaAndLength.javaclass Trangle(double sideA,sideB,sideC,area,length;boolean boo;public Trangle(double a,double b,double c)(代 码 1参数a,b,c分别赋值给sideA,sideB,sideCif(【代码 2】)a,b,c构成三角形的条件表达式(【代码3】给boo赋值。)else【代码4】给bo。赋值。)double getLength()(【代码5】方法体,要求计算出length的值并返回)public double getArea()(if(boo)(double p=(sideA+sideB+sideC)/2.0;area=Math.sqrt(p*(p-sideA)*(p-sideB)*(p-sideC);return area;)else(System.out.println(不是一个三角形,不能计算面积);return 0;)public void setABC(double a,double b,double c)(代码6 参数a,b,c分别赋值给sideA,sideB,sideCif(【代码7】)a,b,c构成三角形的条件表达式【代码8】给boo赋值。else(【代码9】给boo赋值。)class Lader(double above,bottom,height,area;Lader(double a,double b,double h)(代 码10 方法体,将参数a,b,c分别赋值给above,bottom,heightJdouble getArea()【代 码 111 方法体,要求计算出area返回)class Circle(double radius,area;Circle(double r)(【代 码 1 2 方法体)double getArea()(【代 码 1 3 方法体,要求计算出area返回)double getLength()(代 码 14/getArea方法体的代码,要求计算出length返回void setRadius(double newRadius)radius=newRadius;)double getRadius()(return radius;)public class AreaAndLength(public static void main(String args)(double length,area;Circle circle=null;Trangle trangle;Lader ladcr;【代 码 1 5 创建对象circle 代 码 16 创建对象trangle。【代 码 1 7 创建对象lader 代 码 18/circle调用方法返回周长并赋值给lengthSystem,out.println(圆的周长T+length);代 码 19/circle调用方法返回面积并赋值给areaSystem.out.priniln(圆的面积:+area);代码20 /trangle调用方法返回周长并赋值给lengthSystem.out.println(三角形的周长:+length);代码21 /trangle调用方法返回面积并赋值给areaSystem.out.println(三角形的面积:+area);【代码22】lader调用方法返回面积并赋值给areaSystem.oul.println(梯形的面积:area);【代码23】trangle调用方法设置三个边,要求将三个边修改为12,34,1。代码24 /trangle调用方法返网面积并赋值给areaSystem.out.println(三角形的面积:+area);代码25 /trangle调用方法返回周长并赋值给lengthSystem.out.println(三角形的周长:“length);)令实验后的练习:1.程序中仅仅省略【代码15,编译能通过吗?2.程序中仅仅省略【代码16,编译能通过吗?3.程序中仅仅省略【代码15,运行时出现怎样的异常提示?4.给T ra n g l e 类增加3个方法,分别用来返回3个边:s i d e A、s i d e B 和s i d e C。5.让A re a A n d L e n g t h 类中的c i rc l e 对象调用方法修改半径,然后输出修改后的半径以及修改半径后的圆的面积和周长。2.实例成员与类成员。令实验要求:按程序模板的要求编写源文件,要特别注意程序的输出结果,并能正确解释输出的结果。令程序运行效果示例:程序运行效果如下图所示:。程序模板:Example.javaclass A(【代 码 1】声明一个float型实例变量a【代码2】声明一个float型类变量b,即 static变量bvoid setA(float a)(【代码3】将参数a 的值赋值给成员变量a)void setB(float b)(【代码4】将参数b 的值赋值给成员变量b)float getA()return a;)f l o a t g e t B()(re t u rn b;)v o i d i n p u t A()(S y s t e m.o u t.p ri n t l n(a);)s t a t i c v o i d i n p u t B()(S y s t e m.o u t.p ri n t l n(b);)p u b l i c c l a s s E x a m p l ep u b l i c s t a t i c v o i d m a i n(S t ri n g a rg s )(代码5 通过类名操作类变量b,并赋值100【代码6 J 通过类名调用方法i n p u t B OA c a t=n e w A();A d o g=n e w A();【代码7 /c a t象调用方法s e t A(i n t a)将c a t的成员a的值设置为200 代码8 /c a t调用方法s e t B(i n t b)将c a t的成员b的值设置为400【代码9 /d o g象调用方法s e t A(i n t a)将dog的成员a的值设置为150 代 码10 /d o g调用方法s e t B(i n t b)将dog的成员b的值设置为3(X)代码 11 c a t 调用 i n p u t A()o 代码 12 /c a t 调用 i n p u t B O 代码 13 /d o g 调用 i n p u t A()o 代码 14 /d o g 调用 i n p u t B O o)令实验后的练习:1.将i n p u t A O 方法中的S y s t e m,o u t.p ri n t l n(a);改写为S y s t e m,o u t.p ri n t l n(a+b);编译是否出错?为什么?2.将i n p u t B O 方法中的S y s t e m,o u t.p ri n t l n(b);改写为S y s t e m,o u t.p ri n t l n(a+b):编译是否报错?为什么?3.使用package语句与import语句。令 实验要求:按实验要求使用package语句,并用import语句使用Java平台提供的包中的类以及自定义包中的类。掌握一些重要的操作步骤。令程序运行效果示例:程序运行效果如下图所示:令 程序模板:模 板 1:将模板1 给出的Java源文件命名为SquareEquation.java,将编译后得到的字节码文件复制到c:1000tomjiafei目录中。SquareEquation.javapackage tom.jiafei;public class SquareEquation(double a,b,c;double rootl,root2;boolean boo;public SquareEquation(double a,double b,double c)(this.a=a;this.b=b;this.c=c;if(a!=0)boo=true;1else(boo=false;)public void gctRoots()(if(boo)(System.out.println(是一元 2 次方程”);double disk=b*b-4*a*c;if(disk=0)(root 1 =(-b+Math.sqrt(disk)/(2*a);root2=(-b-Math.sqrt(disk)/(2*a);System.out.printf(方程的根:%f,%fn,rootl,root2);1elseSystem.out.printf(方程没有实根n);)else(Systemout.printin(不是一元 2 次方程”);)public void setCoefficient(doublc a,double b,double c)(this.a=a;this.b=b;this.c=c;if(a!=0)(boo=true;)else(boo=false;)模板2:将模板2 给出的Java源程序SunRise.java保存到d:2000中。在编译模板2 给出的Java源文件之前,要重新设置classpatho 假设本地机SDK的安装目录是 E:jdkl.5在命令行执行如下命令:set classpath=e:jdkl.5jrelibrt.jar;.;c:1000然后编译模板2 给出的Java源程序。或用鼠标右键点击“我的电脑”,弹出快捷菜单,然后选择“属性”命令,弹 出“系统属性”对话框,再单击该对话框中的“高级”选项卡,然后单击“环境变量”按钮。将 classpath的值修改为:E:jdk 1,5jrelibrt.jar;.;c:l 000然后重新打开一个命令行窗口,编译模板2 给出的Java源程序。SunRise.javaimport tom.jiafei.*;class SunRisepublic static void main(String args)SquareEquation equation=new SquareEquation(4,5,1);cquation.gctRoots();equation.setCoefficient(-3,4,5);equation.getRoots();)个实验后的练习:假设S D K 的安装目录是E:j d k l.5,那么J a va 运行系统默认c l a sspa th 的值是:E:j d k l.5 j re l i b rt.j a r;.;其中的“”表示应用程序可以使用当前目录中的无名包类以及当前目录下的子目录中的类,子目录中的类必须有包名,而且包名要和子目录结构相对应。因此,如果将模板2 应用程序S un ri se.j a va 的字节码文件存放到d:5 0 0 0中,并将S qua re Equa ti on,j a va 的字节码文件存放在D:5 0 0 0 tom j i a f e i 中,那么就不需要修改c l a sspa th。要特别注意的是,因为S qua re Equa ti on.j a va有包名,切不可将S qua re Equa ti on.j a va 以及它的字节码文件存放在d:5 0 0 0中,即不可以和S un ri se.j a va 的字节码存放在一起,请进行如下的练习:1.将S qua re Equa ti on.j a va 存放在D:5 0 0 0 tom j i a f e i 中,编译:D:5 0 0 0 tom j i a f e i j a va c S qua re Equa ti on.j a va2 .将S un ri se,j a va 存放到D:5 0 0 0 中,编译:D:5 0 0 0 j a va c S un ri se,j a va3 .运行:j a va S un ri se实 验 四 字 符 串、时间与数字类【目的】掌握S tri n g 类的常用方法掌握D a te 类以及C a l e n d a r类的常用方法;掌握B i g i n te g e r类的常用方法。【内容】1.String类的常用方法。令实验要求:编写 个J a va 应用程序,判断两个字符串是否相同,判断字符串的前缀、后缀是否和某个字符串相同,按字典顺序比较两个字符串的大小关系,检索字符串,创建字符串,将数字型字符串转换为数字,将字符串存放到数组中,用字符数组创建字符串。程序运行效果示例:程序运行效果如下图所示:令程序模板:StringExample.javaclass StringExample public static void main(String args|)String sl=new StringCyou are a student),s2=new String(how are you);if(【代码11)/使用equals方法判断s i与s2是否相同(System.out.println(s 1 与 s2 相同);)else(System.out.println(Ms 1 与 s2 不相同);String s3=new String(H22030219851022024);if(代码2)判断s3的前缀是否是“220302”。(System.out.println(,)吉林省的身份证);)String s4=new String(你),s5=new String,我)if(代 码3)按着字典序s4大于s5的表达式。(System.out.println(按字典序 s4 大于 s5);Jelse(System.out.println(按字典序 s4 小于 s5);)int position=0;String path=c:javajspA.java;position=【代码5 获取path中最后出现目录分隔符号的位置System.out.println(c:javajspA.java 中最后出现 的位置:+position);String fileName=【代码6 获取path UA.java”子字符串。System.out.println(c:javajspA.java 中含有的文件名:+fileName);String s6=new String,100),s7=new String。123.678);int n l=代码7 将s6转化成int型数据。double n2=代码8 将s7转化成double型数据。double m=nl+n2;System.out.println(m);String s8=【代码9/String调用valuOf(int n)方法将m转化为字符串对象position=s8.indexOf(/);String temp=s8.substring(position+1);System.out.println(数字+m+有+temp.length()+”位小数);String s9=new StringCABCDEF);char a=代码10 将s8存放到数组a 中。for(int i=a.length-1 ;i=0;i-)System.out.print(+ai);)令实验后的练习:1.2.3.4.5.程序中的s 6 改写成St r ing s 6=ne w St r ing(l a l 2 b”);运行时提示怎样的错误?请用数组a 的前3个单元创建个字符串并输出该串。请给出获取pa t h 中“j s p”子字符串的代码。在程序的适当位置增加如下代码,注意输出的结果。St r ing s t r l=ne w St r ing(UABCABC ),s t r 2=nu l l,s t r 3=nu l l,s t r 4=nu l l;s t r 2=s t r l.r e pl a c e Al l (A,F ir s t“);s t r 3=s t r 2.r e pl a c e Al l (B,Se c ond );s t r 4=s t r 3.r e pl a c e Al l (4V ,Th ir d,);Sy s t e m,ou t.pr int l n(s t r l);Sy s t e m,ou t.pr int l n(s t r 2);Sy s t e m,ou t.pr int l n(s t r 3);Sy s t e m.ou t.pr int l n(s t r 4);可以使用Long 类中的下列s t a t ic 方法得到整数各种进制的字符串表示:Pu b l icPu b l icPu b l icPu b l ics t a t ics t a t ics t a t ics t a t icSt r ingSt r ingSt r ingSt r ingt oBina r y St r ing(l ong i)t oOc t a l St r ing(l ong i)t oI l e x St r ing d ong i)t oSt r ing Cl ong i,int p)其中的t oSt r ing(l ong i,int p)返回整数i的p进制表示。请在适当位置添加代码输出12 34 5的二进制、八进制和十六进制表示。6.在适当位置添加代码,分别输出数字m 的整数部分和小数部分。2.比较日期的大小。令实验要求:编写一个J a v a 应用程序,用户从输入对话框输入了两个I I 期,程序将判断两个日期的大小关系,以及两个日期之间的间隔天数。令程序运行效果示例:程序运行效果如下图所示:令程序模板:DateExampleimport java.util.*;import javax.swing.JOptionPane;public class DateExample(public static void main(String args)(String str=JOptionPane.showInputDialog(输入第一个日期的年份in t yearOne=In teger.parse I n t(str);str=JOptionPane.showInputDialog(输入该年的月份广);int monthOne=Integer.parseInt(str);str=JOptionPane.showInputDialog(输入该月份的日期:);int dayOne=Integer.parse!nt(str);str=JOptionPane.showInputDiaIog(输入第二个日期的年份:);int yearTwo=Integer.parseInt(str);str=JOptionPane.showInputDialog(输入该年的月份公,);int monthTwo=Integer.parseInt(str);str=JOptionPane.showInputDialog(输入该月份的日期:);int dayTwo=Integer.parseInt(str);Calendar calendar=【代 码1初始化日历对象【代码2】将calendar的时间设置为yearOne年monthOne月dayOne 日long timeOne=【代码 3【代码4】dayTwo 日long timeTwo=代码 5 Date date 1=代码 6 Date date2=【代码7if(date2.equals(date 1)/calendar表示的时间转换成亳秒将calendar的时间设置为yearTwo年monthTwo月“calendar表示的时间转换成毫秒。/用timeOne做参数构造datel/用timeTwo做参数构造date2Syslem.oul.printin(两个日期的年、月、日完全相 同)else if(date2.after(date 1)(Syslem.oul.prinUn(您输入的第二个日期大于第一个日期)else if(date2.before(date 1)(Syslem.oul.println(您输入的第二个日期小于第一个日期)long days=【代码8 计算两个日期相隔天数System.out.println(yearOne+,+monthOne+,+dayOne+,H 和+yearTwo+,年+monlhTwo+“月 ”+dayTwo+”相 隔 n+days+M 天令实验后的练习:1.Calendar对象可以将时间设置到年、月、日、时、分、秒。请改进上面的程序,使用户输入的两个日期包括时、分、秒。2.根据本程序中的一些知识,编写一个计算利息(按天计算)的程序。从输入对话框输入存款的数目和起止忖间。3.处理大整数。Q实验要求:编写一个Java应用程序,计算两个大整数的和、差、积和商,并计算个大整数的因子个数(因子中不包括1和大整数本身)。令程序运行效果示例:程序运行效果如下图所示:令程序模板:BigintegerExamplei mp ort j av a.math.*;class Bi g i nteg erEx amp le(p u bli c stati c v oi d mai n(Stri ng arg s )Bi g i nteg er nl二new Bi g i nteg erC987654321987654321987654321/z),n2=new Bi g i nteg er(“123456789123456789123456789”),resu lt=nu l1;resu lt=【代码1 /nl和n 2做加法运算Sy stem,ou t.p ri nti n(和:+resu l t.toStri ng O);resu lt=代码2 /n l和n 2做减法运算Sy stem,ou t.p ri nti n(差:+resu lt.toStri ng O);resu lt=【代码3 /nl和n 2做乘法运算Sy stem,ou t.p ri nti n(“积:”+resu lt.toStri ng O);resu lt=【代码4】/nl和n 2做除法运算Sy stem,ou t.p ri nti n(商:+resu lt.toStri ng O);Bi g i nteg er m=new Bi g i nteg er(“1968957”),COUNT=new Bi g i nteg er(0),0NE=new Bi g i nteg er(1),TW0=new Bi g i nteg er(z/2/z);Sy stem,ou t.p ri ntln(m.toStri ng()+”的因子有:);f or(Bi g i nteg er i=TWO;p areTo(m)=0.5)op erator=+;elseop erator=一 ;retu rn op erator;)p u bli c boolean g etRi g h t(i nt answ er)i f(op erator.equ als(+”)i f(answ er=nu mberOne+nu mberTw o)ri g h t=tru e;elseri g h t=f alse;)else i f(op erator,equ als(一 )i f(answ er=nu mberOne-nu mberTw o)ri g h t=tru e;elseri g h t=f alse;retu rn ri g h t;)ComputerFrame.javai mp ort j av a.aw t.*;i mp ort j av a.aw t.ev ent.*;p u bli c class Comp u terFrame ex tend s Frame i mp lements Acti onLi stener Tex tFi eld tex tOne,tex tTw o,tex tResu lt;Bu tton g etProblem,g i v eAnw ser;Labe 1 op eratorLabel,messag e;Teach er teach er;Comp u terFrame(Stri ng s)su p er(s);teach er=new Teach er();setLay ou t(new Flow Lay ou t();tex tOne=代 码1 创建tex tOne,其可见字符长是10tex tTw o=代码2 创建tex tTw o,其可见字符长是10tex tResu lt=【代码3】创建tex tResu lt,其可见字符长是10op eratorLabel=new Label(+);messag e二new Label(你还没有回答呢“);g etProblem=new Bu tton(获取题目);g i v eAnw ser=new Bu tton(确认答案);ad d(g etProblem);ad d(tex tOne);ad d (op eratorLabel);ad d(tex tTw o);ad d(new Label(=);ad d(tex tResu lt);ad d(g i v eAnw ser);ad d(messag e);tex tResu lt.requ estFocu s();tex tOne.setEd i table(f alse);tex tTw o.setEd i table(f alse);代码4 将当前窗口注册为g etProblem的Acti onEv ent事件监视器【代码5】将当前窗口注册为g i v eAnw ser的Acti onEv ent事件监视器 代码6 将当前窗口注册为tex tResu lt的Acti onEv ent事件监视器setBou nd s(100,100,450,100);setVi si ble(tru e);v ali d ate();ad d Wi nd ow L i stener(new Wi nd ow Ad ap ter0 p u bli c v oi d w i nd ow C1osi ng(Wi nd ow Ev ent e)Sy stem,ex i t(0););p u bli c v oi d acti onPerf ormed(Acti onEv ent e)i f (【代码7】)判断事件源是否是g etProblem i nt nu mberl=teach er.g i v eNu mberOne(100);i nt nu mber2=teach er.g i v eNu mberTw o(lOO);Stri ng op erator=teach er.g i v etOp erator();tex tOne.setTex t(”+nu mberl);tex tTw o.setTex t(”+nu mber2);op eratorLabel.setTex t(op erator);messag e.setTex t(请回答”);tex tResu lt.setTex t(nu ll);)i f (【代码8】)判断事件源是否是g i v eAnw ser Stri ng answ er=tex tResu lt.g etTex tO;try i nt resu lt=Integ er.p arselnt(answ er);i f (teach er.g etRi g h t(resu l t)-tru e)messag e.setTex t(你回答正确);)else messag e.setTex t(你回答错误);)catch(Nu mberFormatEx cep t i on ex)messag e.setTcx t(请输入数字字符”);tex tResu lt.requ estFocu s();v ali d ateO;)MainClass.javap u bli c class Mai nClass p u bli c stati c v oi d mai n(Stri ng arg s )Comp u terFrame f rame;f rame二【代码9】创建窗口,其标题为:算术测试)令实验后的练