Java程序设计实验指导书.docx
、Java程序设计与开发实验课程教学方式1、本课程教学方式以实践动手为主,辅助以教师指导。2、首次上课以本课程要实现的目标、学生要到达的能力为教学目标。3、教师讲解、提出课堂目标,指明实验步骤,强调问题。二、实验内容本课程为实践性的教学过程,主要包括JDK和Jcreator的安装与初步使用, Java语言基础知识的运用,程序流程控制,数组,面向对象的编程,接口与包, Java图形用户界面设计与事件处理,Javal/O系统,异常处理,多线程程序设计, applet等,注重实践性能力培养。三、实验报告的书写格式以专业规范的实验报告书为准四、考核标准1、课堂出勤2、实验完成情况3、实验报告的撰写,包括目的、准备过程、实验记录、结果讨论等环节。4、时间安排,依据课表完成教学任务。实验3 Java语言基础(2)一、实验目的1、熟练掌握Java的基本数据类型;2、熟练掌握Java的运算符及构成的各种表达式。二、软硬件要求基于Windows平台的机器要求如下:硬件要求:CPU PII以上,64M内存,100M硬盘空间即可。软件要求:Windows98/Me/XP/NT/2000, IE 5 以上。三、实验内容与步骤1、编写程序,运行效果图如下。Conf iguration: <Default >a=25,b=20 # e=3,f = 0因为关系表达式a<b为假,所以其逻雪值为:false因为e非0且a/e为8大于5,所以输出 a/e= 8因为f值为0,所以输出f = 0程序设计如下:public class SY3_1 public static void main(String args|) int a=25, b=20, e=3, f=0;boolean d=a<b;System.out.println("a=25,b=20,e=3,f=0");("因为关系表达式a<b为假,所以其逻辑值为:"+d); if(e!=0 && a/e>5)("因为 e 非。且 a/e 为 8 大于 5,所以输出 a/e= n+a/e);if(f!=O && a/f>5)System.out.println(,'a/f = H+a/f);else("因为 f 值为 0,所以输出)2、编写程序,设a=3, b=-5, f=true,计算以下表达式的值。(1) -a % b+(2) (a=l && a<=12?a:b)(3) f A (a>b)(4) (-a)« a程序设计如下:public class SY2_2 public static void main(String args) int a=3,b5;boolean f=true;System.out.print("-a % b+ =M+(-a % b+)+nnn);a=3;b=-5;System.out.print(n(a>=l && a<=12 ? a:b)=H+(a>=l&&a<=12?a:b)+HnM);System.out.print(,fA(a>b)=H +(fA(a>b)+nnH);System.outprint(M(a)«a=f,+(a)«a)+nnn);I3、对字节型数据64进行左移2位public class ByteLeftShift public static void main(String argsf) byte a = 64, b;int i;1 = a « 2;b = (byte) (a « 2);System.out.println(HOriginal value of a: " + a);System.out.println(na « 2 结果赋给 int i=" + i);System.out.println(na « 2 结果赋给 byte b=,1 + b);)实验4 Java语言基础(3)一、实验目的1、熟练掌握Java的基本数据类型;2、熟练掌握Java的运算符及构成的各种表达式。二、软硬件要求基于Windows平台的机器要求如下:硬件要求:CPU PII以上,64M内存,100M硬盘空间即可。软件要求:Windows98/Me/XP/NT/2000, IE 5 以上。三、实验内容与步骤执行效1、对整型数据OxFFFFFFE进行左移4位操作,并打印出每移一位后的结果。 果图如下。C:Program Files (x86)X.l.268435454«1=536870908268435454«4=-32Press any key to continue.rrr程序设计如下:public class IntLeftShift.java public static void main(String args) int i;int num = OxFFFFFFE;int r=num;for(i=l; i<5; i+) r =r « 1;System.out.println(num4-n«n+i+,-n+r); 2、短路逻辑运算实验。编写以下程序,并回答以下问题。class test6 public static void main(String args) int x = 1, z = 2;System. out. printin("第1段测试代码输出)if(false&&(x = (z = 1)System.out.println(x);else System.out.println(z);z = 2; x =1;("第2段测试代码输出)if(true&&(x = (z 二 l)&&false)System.out.println(x);else System.out.println(z);x=0; z = 2;("第3段测试代码输出)if(true|(x = (z = 1)System.out.println(z);x=0; z = 2;("第4段测试代码输出)if(false|(x = (z =l)|true) System.out.println(z); 请分析并11答以下问题:(1)第1段代码的输出结果是什么,为何?答:结果是2。没有计算(x=(z=l), z仍等于2,输出z的值,即输出2。(2)第2段代码的输出结果是什么,为何?答:结果是1。计算了(X =(Z = 1), Z被赋值为1,输出Z的值,即输出1。(3)第3段代码的输出结果是什么,为何?答:结果是2。没有计算(x=(z= l), z仍等于2,输出z的值,即输出2。(4)第4段代码的输出结果是什么,为何?答:结果是1。计算了(x=(z=l), z被赋值为1,输出z的值,即输出24 .移位运算实验。编写以下程序,分析代码的输出结果,并回答以下问题。class Test4public static void main(String args)System. out. printing第1段测试代码输出)System.out.println( 1 »32);System.out.println(l L»32);("第2段测试代码输出”);System.out.println( 10»5);System.out.println(-10»5);System.outprintln("第3段测试代码输出)System.out.println( 1 «31);System.out.println(lL«31);System.out.println(lL«63);("第4段测试代码输出)System.out.println( 1«100);System.out.println( 1 L« 100);请分析并回答以下问题:(1)分析第1段代码,为何输出会不同?答:int类型为32为,所以右移32位还是其本身,long类型为64为,所以右移32位, 低位被舍弃,高位补。,最终结果为0。(2)分析第2段代码,正整数右移的最小值是什么?负整数右移的最大值是什么?答:正整数右移的最小值是0,负整数右移的最大值是-1。(3)分析第3段代码,三个语句输出为何不同?答:int类型右移31位,符号位就是lo符号位1代表为负数,long类型右移31位, 只能说明扩大了 2的31次方,long类型右移63位,符号位就是1,符号位1代表为负数(4)分析第4段代码,两个语句输出为何不同?答:int类型左移100位,和右移4位一样,100除以32的余数。long类型左移100位, 和右移36位一样,100除以64的余数。实验5程序流程控制(1)一、实验目的1、掌握条件语句ifelse的使用。2、掌握开关语句switch的使用。3、掌握for循环语句的使用二、软硬件要求基于Windows平台的机器要求如下:硬件要求:CPU PII以上,64M内存,100M硬盘空间即可。软件要求:Windows98/Me/XP/NT/2000, IE 5 以上。三、实验内容与步骤1、编写程序,使用if.else语句构造多分支,判断某一年是否为闰年。闰年的条件是 符合下面二者之一:能被4整除,但不能被100整除;能被4整除,又能被100整除, 执行效果图如下。2005年不是闰年2008年是闰年2050年不是闰年程序设计如下:public class SY4_1 public static void main(String args) boolean leap;int year=2005;if (year%4=0 && year%100!=0) | (year%400=0) / 方法 1 System.out.println(year+n 年是闰年)elseSystem.out.println(year+n 年不是闰年)year=2008; / 方法 2if (year%4!=0)leap=false;else if (year%100!=0)leap=true;else if (year%400!=0)leap=false;elseleap二true;if (leap=true)System.out.println(year+H 年是闰年)elseSystem.out.println(year+,年不是闰年)year=2050; / 方法 3if (year%4=0) if (year% 100=0) if (year%400=0) leap=true;elseleap=false; elseleap二false;elseleap=false;if (leap=true)System.out.println(year+n 年是闰年) elseSystem.out.println(year+H 年不是闰年”); )2、把if语句构成选择结构实例改成用开关语句switch构成的结构实例。 public class Grade public static void main(String args)int score=87;char grade;if(score>=90) grade=,A,;elseif(score>=80) grade=,B,; else if(score>=70) grade='C*; elseif(score>=60) grade='D' elsegrade='E'System.out.println(H87:grade is n+grade); )3、计算1至50之间所有素数的和。public class SY4_3public static void main(String args)int count = 0;for(int i = 2;i<=50;i+)for(intj = 2;j<=i;j+)if(i%j= 0) count+; if(count=0)System.wZ.println(i); Count = 0; 实验6程序流程控制(2)一、实验目的1、掌握循环语句while的使用。2、掌握循环语句dowhile的使用。3、掌握跳转语句 break> continue 和 returno二、软硬件要求基于Windows平台的机器要求如下:硬件要求:CPU PII以上,64M内存,100M硬盘空间即可。软件要求:Windows98/Me/XP/NT/2000, IE 5 以上。三、实验内容与步骤1、编写程序,while循环语句练习,从键盘输入数字1, 2或3后,可显示抽奖得到 的奖品;如果输入其它数字或字符显示“没有奖品给你!”。输入数字显示信息1恭喜你得大奖,一辆汽车!2不错呀,你得到一台笔记本电脑!3没有白来,你得到一台冰箱!其他数字或字符真不幸,你没有奖品!下次再来吧!程序设计如下:import java.io.*;class SY5_1public static void main(String args) throws lOException char ch;("按 1/2/3 数字键可得大奖!");System.out. printing按空格键后回车可退出循环操作.”);while (ch=(char)System.in.read()!=!)(System.in.skip(2); / 跳过回车键switch (ch) case T:(”恭喜你得大奖,一辆汽车!”);break;case 2':("不错呀,你得到一台笔记本电脑!) break;case 3:System. out. printin("没有白来,你得到一台冰箱! ”); break;default:真不幸,你没有奖品!下次再来吧。) )2.编写程序,dowhile循环语句练习,求1+2H+100之和,并将求和表达式与 所求的和显示出来,输出效果如下。1+2+.+100 -5050程序源代码如下。class SY5_2public static void main(String args) int n=l, sum=0;do sum+=n+;)while (n<=100);System, out. printing 1+2 + .4-100 ="+sum);)3、编写程序,要求输出。100之间所有奇数之和。程序设计如下:class SY5_3public static void main(String args) int i=0, sum=0;while(i<101)if(i%2!=0)sum=sum+I;i+;)System.out.println(nsum =n+sum);实验7程序流程控制(3)一、实验目的1、掌握for循环语句的使用。2、掌握多重循环编程。二、软硬件要求基于Windows平台的机器要求如下:硬件要求:CPU PII以上,64M内存,100M硬盘空间即可。软件要求:Windows98/Me/XP/NT/2000, IE 5 以上。三、实验内容与步骤1、编写程序,要求输出直角星号。* * * * *程序设计如下:public class relation 1 public static void main(String args )int a=5;fbr(int i=l;i<=a;i+)for(intj=l;j<=i;j+)System.out.print("*H);)System.out.println(,n);)2、编写程序,多重循环练习,产生10个100之内的随机整数输出,并把这10个 数按从小到大的顺序输出,执行效果图如下。General Output26 o9 o3 3:38 86 76 76 42 o 6 5o o 5 9o 2 3 1X2 8 2Conf iguration: <Default > 10个100之内的随机整数:22 I 10个数按从小到大的顺序:4 12 Process completed.程序设计如下:public class SY6_2public static void main(String args) int math = new int10; for(int i = 0;i<10;i+) mathi = (int)(Math.random()* 100); System.out.print(mathi+H ");System.out.println();for(int i = 0;i<10;i+)for(int j = 0;j<10;j+) if(mathi<mathj) int 1 = mathi;mathi = mathfj;mathj = 1;)for(int i = 0;i<10;i+)System.out.print(mathfi+n H);)3、编写程序,多重循环练习,输出九九乘法表的程序,执行效果图如下。1*1 = 11*2 = 21*3 = 31*4 = 41*5 = 51 善 6 = 61*7 = 71*8 = 81*9 = 92*2 = 42*3 = 62*4 = 82*5=102美6=122*7=142*8=162*9=183*3 = 93*4=123*5=153*6=183*7-213*8=243*9=274*4=164*5=204*6=244*7=284»8=324*9=365*5=255詈6=305*7=355*8=405*9=456美6=366*7=426*8 = 4 86*9=547*7-497*8=567*9=638*8=648*9=729*9=81程序设计如下:public class SY6_3 public static void main(String args)(int i,j,n=9;System.out.print(n *);for (i=l;i<=n;i+)程序设计如下:public class SY6_3 public static void main(String args)(int i,j,n=9;System.out.print(n *);for (i=l;i<=n;i+)System, out. print。"+i);System.out.print("nr);for (i=l;i<=n;i+)System. out. print。'");System.out.println();for (i=l;i<=n;i+) (System, out. print。'"+i+”|H);for(j=l;j<=i;j +十)System.out.print(" "+i*j);System.out.println();Java运行环境的安装、配置与运行3Java语言基础(1) 8Java 语言基础 (2) 10Java语言基础(3) 12程序流程控制(1) 14程序流程控制(2) 16程序流程控制(3) 18数组(1) 20数组(2) 22类和面向对象(1) 24类和面向对象(2) 26Java 接口与 Java 包 (1) 29Java 接口与 Java 包(2) 31图形用户界面(D 34图形用户界面(2) 36Java I/O 系统(1) 38Java I/O 系统(2) 40异常处理(1) 42异常处理(2) 44多线程程序设计(1) 47实验1实验2实验3实验4实验5实验6实验7实验8实验9实验10实验11实验12实验13实验14实验15实验16实验17实验18实验19实验20实验21多线程程序设计(2) 50实验8数组(1)一、实验目的1 .掌握声明、创立和初始化各种类型的数组。2 .掌握一维数组的概念和对一维数组元素的访问方法。二、软硬件要求基于Windows平台的机器要求如下:硬件要求:CPU PII以上,64M内存,100M硬盘空间即可。软件要求:Windows98/Me/XP/NT/2000, IE 5 以上。三、实验内容与步骤1、有整型数组:10,7,9,2,4,5,1,3,6,8,利用Arrays.sort方法对数组进行排序,并输出该 数组的每个元素。import java.util.Arrays;public class Two public static void main(String args) int a = 10,7,9,2,4,5,1,3,6,8;Arrays.sort(a);for (int j = 0; j < a.length; j+) System.out.print(aj + ” ”);)System.out.printlnO;)2、将一个给定的整型数组转置输出,例如:源数组1 23 45 6,转置之后的数组 6543 2 1c效果图如下。General Output原数组aO,=1a1=2a2=3a3=4a4=5a5二6转置1数组a0=6a1=5a2=4a3=3a4=2a5»1程序设计如下:class testl static void change(int a)int j二a.length;for(i=0;(i<j/2);i+) t=ai; ai=aj-l-i; )static void show_a(intJ a) for(int i=0;i<a.length;i+4-)System.out.println(nan4-i+n=n+ai); )public static void main(String args) int a= 1,2,34,5,6;("原数组:H);show_a(a); change(a);("转置数组:”); show_a(a); 3、现在有如下的一个数组:int oldArr= 1,34,5,0,0,6,6,0,5,4,7,6,7,0,5),要求将以 上数组中值为0的项去掉,将不为0的值存入一个新的数组,生成的新数组效果图如下。效果图如下。为:int newArr=1,3,4,5,6,6,5,4,7,6,7,5。原数组:01,2,3,4,5,6,7,8,911011,12,13,14,151=1 =3=4=5=0 =0=6 =6=0 =5=4 =7=6=7 =0=5新数组:0 12, 45, 678 9 10=1 =3=4二5=6=6=5=4 =7=6 1=7111=5程序设计如下:class test2static int change(int a)int i,j; int b;for(i=0 j=0;i<a.length;i+) if(ai!=0)j+; )b=new intj;if(ai!=O) bU=ai; j+;for(i=0,j=0;i<a.length;i+) )return b; static void show_a(int a)for(int i=O;i<a.length;i+)System, out. println("a"+i+" 尸'+a i); )public static void main(String args)int oldArr口=1,3,4,5,00,6,6,0,5,4,7,6,7,0,5;int ncwArr;newArr=change(oldArr);原数组:”);show_a(oldArr);("新数组:”);show_a(newArr); 实验9数组(2)一、实验目的1 .掌握冒泡排序法和选择排序法。2 .掌握二维数组的概念,能够声明、创立和初始化各种类型的二维数组。3 .掌握二维数组元素的访问方法。二、软硬件要求基于Windows平台的机器要求如下:硬件要求:CPU PII以上,64M内存,100M硬盘空间即可。软件要求:Windows98/Me/XP/NT/2000, IE 5 以上。三、实验内容与步骤1、用冒泡法对6个整数9,8,542,0从小到大排序,执行效果图如下。I可 x|冒泡法从小到大排序的思路是:将相邻两个数比拟,将小的调到前头,大的换到后头。 对6个数比拟5次后,最大数沉至于底,找到自己的最终位置(下一次不再参加比拟),此时 完成第一趟的比拟。然后进行第2趟比拟,对余下的前面5个数按上法进行比拟。C:WI N DOWSXsystem 32cmd. exeD: jtest>jauac BubbleSort.jauaD: jtest>jaua BubbleSort542,0经冒泡法排庠后结果为:0 2 4 5 8 9程序设计如下:public class BubbleSort public static void swap(int array,int i,int j) int temp;temp=arrayi;array( i=arrayjl; arrayj=temp;)public static void main(String args) int intArray =9,8,5,4,2,0; int ij;共进行6-1趟比拟在每趟中要进行(10-i)次两两比拟/如果前面的数大于后面的数交换两个数的位置,使小数上浮for(i=0;i<intArray.length-l;i+)for(j=0;j<intArray.length-l-i;j+) if(intArrayj>intArrayj+l) swap(intArray,j 1);System.out.println(n9,8,5A2,0 经冒泡法排序后结果为:”);for(i=0;i<intArray.length;i+) 输出排序后的 6 个数System.out.print(intArrayi+n n);2、用选择法对6个整数60,50,30,20,40,90从小到大排序,执行效果图如下。选择法从小到大排序的思路是:将第1个数与其后的所有数进行比拟,将最小的换到最 前头。对6个数比拟5次后,最小的被调到了最前头,最小的数找到自己的最终位置(存到 数组第一个元素中,下一次不再参加比拟),此时完成第一趟的比拟。然后进行第2趟比拟, 此时只对余下的后面5个数按上法进行比拟,将其中最小的数调到自己的最终位置(存到第2个元素中,下次前2个元素不参加比拟)。依此类推经过5趟比拟后,完成最终排序。c : C: WI N DOWSXsystem 3 2cmd. exeD: jtest>jaua SellectionSort sorted=20 30 40 50 60 90程序设计如下:public class SellectionSortpublic static void swap(int array,int i,int j)int temp;/完成2薮交换的方法temp=arrayi;完成 arrayi与 array。的交换array i=array j;array j=temp;)public static void main(String args)int血人仃丫口=60,50,30,20,40,90;/创立整型数组intArray并初始化int i,j,value,index;for(i=0;i<intArray.length-l;i+)进行 6-1 趟比拟value=intArrayi;value=intArrayi;/将第i趟的第i个元素值保存到value中index二i; /下标i保存到index中,该位置为本趟要存数据的位置for(j=i+1 ;j<intArray.length;j+)Hk i+1 以后的各元素中找到最小的if(value>int Array j ) value=intArrayj;index寸if(i!=index) 如果intArrayi不是最小值那么交换 swap(intArray,i,index);)System.out.print("sorted=");for(i=0;i<intArray.length;i+)System.out.print(intArrayi+H n); 3、编写程序利用二维数组存储九九乘法表,并输出该乘法表。(注意,空间用多少申请 多少,不能申请多余的空间)。程序设计如下:public class One public static void main(String args) String a=new String9;for(int i=O;iva.length;i+)a|ij=new Stringi+l;for(int j=O;j<ai.length;j+)遍历输出for(String x:a)for(String y:x)Systemo£print(y+"t");System.f?w/.println();)实验10类和面向对象(1)一、实验目的1 .熟悉类的创立方法。2 .掌握对象的声明与创立。3 .能利用面向对象的思想解决一般问题。二、软硬件要求基于Windows平台的机器要求如下:硬件要求:CPU PII以上,64M内存,100M硬盘空间即可。软件要求:Windows98/Me/XP/NT/2000, IE 5 以上。三、实验内容与步骤1 .以下程序能否通过编译?上机验证并指明错误原因与改正方法。Class Location Private int x,y;Public void Location(int a,int b) X=a; y=b;Public int getX()return x;Public int getY()return y;Public static void main(String args)Location loc=new Location( 12,20);System.out.println(loc.getX();System.out.println(loc.getY(); 2 .创立一个图书类,类中包含的属性有:书名、作者、出版社;包含的方法有:设 置书籍状态,查看书籍状态。书籍状态有在馆和外借两种。public class Libprivate String Bname;private String Aname;private String Baddress;书籍状态private boolean zt;包含方法set getpublic void setzt(boolean zt)this.zt=zt;)public boolean getzt(boolean zt)return zt;)public static void main(String args) )3 .设计一个Birthday类,其成员变量有:year,month,day;提供构造方法、输出 Birthday对象值的方法和计算年龄的方法。编写程序测试这个类。public class Birthday private int year;private int month;private int day;public Birthday(int year,int month,int day) this.year=year;this.month=month;this, day二day;)public void printBirthDay()System.out.println(year+n-n+month4-u-n+day);)public int printAge()return 2012-year;)public static void main(String args) 实验11类和面向对象(2)一、实验目的1 .熟悉类的创立方法。2 .掌握对象的声明与创立。二、软硬件要求基于Windows平台的机器要求如下:硬件要求:CPU PII以上,64M内存,100M硬盘空间即可。软件要求:Windows98/Me/XP/NT/2000, IE 5 以上。三、实验内容与步骤1、编写一个类,描述汽车,其中用字符型描述车的牌号,用浮点型描述车的价格。 编写一个测试类,其中有一个修改价格的方法,对汽车对象进行操作,根据折扣数修改 汽车的价格,最后在main。方法中输出修改后的汽车信息。程序设计如下:class CarString chePai;float price;float price 1;Car(String chePai,float price) this.chePai=chePai;this.price 1 =price*4/5;this.price = price;)void dismessage()System.oMprint