《Java语言程序设计实验指导书》实验指导书文档格式.docx
《《Java语言程序设计实验指导书》实验指导书文档格式.docx》由会员分享,可在线阅读,更多相关《《Java语言程序设计实验指导书》实验指导书文档格式.docx(53页珍藏版)》请在冰豆网上搜索。
将J2SDK的lib文件夹的完整路径写入。
如图3-5。
图1-2CLASSPATH系统变量的配置
(2)进入DOS虚拟环境;
(3)将实验1的程序保存在d:
\example文件夹下;
(4)使用javac命令编译程序;
(如图3-6)
(5)使用java运行程序。
注意包中程序的编译与运行方法。
图1-3利用JDK环境编译运行Java应用程序
(以下实验前请仔细阅读BlueJ教程的电子文档)
2.在BlueJ环境下新建一个工程,在工程中编写一个简单的Java程序,在屏幕上输出”hello,java!
”。
publicclassHello
{
publicstaticvoidmain(Stringargs[])
}
}
3.编译运行Java程序。
4.设置环境变量,在命令行下编译运行Java程序。
5.浏览运行JDK自带的Applet应用小程序。
6.在程序中设置断点、单步执行、查看变量值。
要求:
1、独立完成;
并以实际上机操作计成绩;
2、所有上机实验必须在下一次实验之前完成,否则此次实验成绩算0分;
3、编写实验报告(按照报告模板编写,必须写出详细的实验步骤及必要的屏幕截图)。
实验二 创建一个Applet
了解Applet与Application的区别,学会设计Applet程序。
已知JButton类有一个构造函数原形为:
publicJButton(Stringtext,Iconicon)。
其中参数text为显示在按钮上的文本、参数icon为显示在按钮上的图标。
下面的例子就是利用此构造函数产生一个带有文本、图标的按钮,并且当按一下按钮,图标就切换一次。
此图标切换是在两个图标中循环进行的。
程序如下:
importjavax.swing.*;
importjava.awt.*;
importjava.awt.event.*;
publicclassButtonExampleextendsJApplet{
intimageNum=1;
publicvoidinit(){
Containercon=getContentPane();
finalJButtonjb_ok=newJButton(″按我″,newImageIcon(″sun1.gif″));
con.setLayout(newFlowLayout());
con.add(jb_ok);
jb_ok.addActionListener(newActionListener(){
publicvoidactionPerformed(ActionEvente){
if(imageNum==1){
jb_ok.setIcon(newImageIcon(″sun2.gif″));
imageNum=2;
else{
jb_ok.setIcon(newImageIcon(″sun1.gif″));
imageNum=1;
});
此程序中还用到了JButton类的setIcon()方法,用以设置按钮的新的图标。
Html文件代码:
(文件名为Appcounter.htm)
<
appletcode=ButtonExample.classwidth=300height=200>
/applet>
将该文件与ButtonExample.class保存在同一个目录中,使用appletviewerappconmter.htm命令就可以运行这个applet。
实验三 数据类型及表达式
1.掌握Java语言的基本数据类型,了解数据类型包装类的概念。
2.掌握变量和表达式的用法。
3.理解类型转换的概念。
1.输入并运行下面的程序,体会各种基本数据类型的变量的声明、初始化及使用。
publicclassBasicTypes{
publicstaticvoidmain(Stringargs[]){
byteb=0x88;
shorts=0200;
inti=111111;
charc='
A'
;
floatf=.33f;
doubled=.00001001;
booleanbl=true;
″byteb=″+b);
″shorts=″+s);
″inti=″+i);
″long1=″+1);
″charc=″+c);
″floatf=″+f);
″doubled=″+d);
″booleanbl=″+bl);
思考:
(1)上述程序中定义了哪些变量?
每个变量的变量名、数据类型和作用域分别是什么?
(2)查看程序的运行结果,分析为什么有些变量最后输出的结果和初始化时的不同?
2.输入并运行下面的程序并分析结果,体会各种表达式的使用方法。
(1)publicclassArithmaticOp{
publicstaticvoidmain(Stringargs[]){
inta=5,b=3,c;
doubled=2.5;
c=a/b+a%b;
″c=″+c);
d=c*b+a/b*d;
″d=″+d);
(2)publicclassArithmaticOp2{
publicstaticvoidmain(Stringargs[]){
inta,b,c;
a=b=c=5;
a=++b-++c;
″a=″+a+″b=″+b+″c=″+c);
a=b+++c++;
a=b――+c――;
″a=″+a+″b=″+b+″c=″+c;
(3)publicclassLogicOp{
publicstaticvoidmain(Stringargs[]){
booleanx,y;
x=5>
3‖3*4<
6&
&
!
(5<
3);
y=2==6&
9>
8+4||5+6<
7+4&
x;
″x=″+x+″,y=″+y);
(1)上述程序中用到了哪些运算符?
运算符的优先级如何?
(2)增一和减一运算符(++和--)放在变量和放在变量之后,其用法有何不同?
(3)将你分析程序得到的结果与实际的运行结果相比较,如果有不同,原因在哪里?
3.输入并运行下面的程序,分析结果,了解并掌握自动类型转换用法。
publicclassPromotion{
byteb=10;
charc=′a′;
inti=90;
longl=5551;
floatf=3.5f;
doubled=1.234;
floatf1=f*b;
//float*byte―>
float
inti1=c+i;
//char+int―>
int
longl1=1+i1;
//long+int―>
long
doubled1=f1/i1-d;
//float/int―>
float,float―double―>
double
″f1=″+f1);
″il=″+il);
″l1=″+l1);
″d1=″+d1);
(1)上面的程序用到了哪些自动类型转换?
分别是如何实现的?
(2)何时需要用到强制类型转换?
强制类型转换可能会造成什么不良后果?
提高:
1.在Java中,数据类型包装类(typewrapperclass)用于封装基本数据类型的有关信息和操作。
虽然我们经常直接使用Java的基本数据类型,但由于它本身不具备任何操作,无法扩充自身功能,因此,为确保Java语言的纯面向对象特性,Java的语言基础包为数据类型提供了一些对象封装。
数据类型包装类是由多个类组成的一个集合,每种数据类型均存在相应的对象封装类。
下表列出了Java的数据类型包装及其对应的基本数据类型。
基本数据类型数据类型包装类
byteByte
shortShort
intInteger
longLong
floatFloat
doubleDouble
charCharacter
booleanBoolean
每一个类都提供了一些属性和方法,用户可以根据需要来灵活使用。
注意:
数据类型包装类与相应的基本数据类型名字几乎相同,请不要混淆。
前者的显著特点是第一个字母应为大写。
2.输入并运行下面的程序,了解并掌握数据类型包装类的属性和用法。
publicclassMaxVariables{
//integers
bytelargestByte=Byte.MAX_VALUE;
//MAX_VALUE是Byte类的属性(表示Byte类所能达到的最大值)
shortlargestShort=Short.MAX_VALUE;
intlargestInteger=Integer.MAX_VALUE;
longlargestLong=Long.MAX_VALUE;
//realnumbers
floatlargestFloat=Float.MAX_VALUE;
doublelargestDouble=Double.MAX_VALUE;
//otherprimitivetypes
charaChar=′S′;
booleanaBoolean=true;
//displaythemall
″Thelargestbytevalueis″+largestByte);
″Thelargestshortvalueis″+largestShort);
″Thelargestintegervalueis″+largestInteger);
″Thelargestlongvalueis″+largestLong);
″Thelargestfloatvalueis″+largestFloat);
″Thelargestdoublevalueis″+largestDouble);
//Character类有一个方法booleanisUpperCase(charch)是用来判断一个字符是
//否是大写
if(Character.isUpperCase(aChar)){
″Thecharacter″+aChar+″isuppercase.″);
}else{
″Thecharacter″+aChar+″islowercase.″);
}
″ThevalueofaBooleanis″+aBoolean);
(1)修改上面的程序,让它能输出每种整型数据类型能表示的最小值。
(提示:
Byte类型的最小值属性是MIN_VALUE)
(2)Character类有另一个方法booleanisLowerCase(charch),可以来判断一个字符是否为小写。
修改适当的语句,使程序完成相同的功能。
(3)修改上面的程序,使布尔型变量aBoolean具有一个不同的值。
实验四 控制流程
1.充分掌握流程控制语句的格式和功能。
2.熟练运用流程控制语句进行程序设计。
3.学会进行简单的程序调试。
1.输入并运行下面两个程序:
(1)publicclassWhileDemo2{
publicstaticvoidmain(String[]args){
inti=100;
while(i<100{
″Print″+i);
i++;
(2)publicclassDoWhileDemo2{
do{
i++
}while(i<
100);
运行上面两个程序,比较While和DoWhile语句的执行过程有何不同。
2.输入并运行下面的程序:
publicclasslxsum{
publicstaticvoidmain(String[]args){
inti=1,sum;
sum=0;
while(i<
=100){
sum+=i;
″sum=″+sum);
(1)循环一般适用于什么情况?
(2)请用for循环和do-while循环为实现上面的程序的功能。
3.输入并运行下面的程序,体会switch语句的使用。
publicclasslxswitch{
publicstaticvoidmain(String[]args){
intx=1,y=2,i=0,j=0;
switch(x){
case1:
switch(y){
i++;
break;
case2:
j++;
default:
j++;
case2:
break;
″i=″+i);
″j=″+j);
(1)将你分析程序得到的结果与实际的运行结果相比较,看看有没有什么不同。
如果有不同,原因在哪里?
(2)break语句在switch语句中起到了什么作用?
4.输入并运行下面的程序,判断某一年是否是闰年。
闰年的条件是符合下面二者之一:
(1)能被4整除,但不能被100整除;
(2)能被4整除,又能被400整除。
publicclassJudgeLeapYear{
publicstaicvoidmain(Stringargs[]){
//方法1
intyear=1800;
if((year%4==0&
year%100!
=0)||(year%400==0))
″年是闰年″);
else
″年不是闰年″);
//方法2
year=1997;
booleanleap;
if(year%4!
=0)
leap=false;
elseif(year%100!
leap=true;
elseif(year%400!
leap=false;
if(leap==true)
″年不是闰年″)
//方法3
year=2000;
if(year%4==0){
if(year%100==0){
if(year%400==0)
leap=true;
}else
″年不是闰年″);
(1)程序中是如何判断一个数能被另一个数整除的?
(2)请说出程序中用了哪三种方法来判断是否闰年,并体会其中的联系和区别。
在输入程序的过程中难免要出错。
一般说业,程序中的错误有两种:
语法错误和逻辑错误。
程序调试就是要找出程序中的错误,编出正确的程序。
下面的程序用来输出5次"
Hello!
"
,请更正程序中的错误,并上机调试运行。
publicclassHello{
publicstaticvoidmain(String[]args){
for(i=1;
i<
5;
i++);
{
″time″+i+″:
Hello!
″);
在MS-DOS下编译该程序,输入javacHello.java,屏幕上会出现如下错误信息:
Hello.java:
5:
Undefinedvariable:
i
for(i=1;
?
for(i=1;
Undefinedvarable:
i++)
7:
Hello″);
4errors
可以看到,Java中的错误信息包含如下内容:
(1)源程序文件名;
(2)出错那一行的行号;
(3)出错的类型;
(4)出错那一行的内容。
根据系统给出的错误信息,可以进行相应的修改。
如上面的几个错误,类型都是"
i"
也就是说,变量i尚未定义。
于是就可以分析出出错的原因是程序中没有声明变量i就直接使用了它,就是一个语法错误,在源程序中进行相应的修改。
修改过的程序内容如下:
publicclassHello{
publicstaticvoidmain(String[]args){
inti;
//新添的变量说明
for(i=1;
i++){
System.out.println(″time″+i+″:
″)
对上面的程序再进行编译,顺利通过(屏幕没有出现任何信息)后生成相应的.class文件。
运行该文件,结果为:
time5:
只输出了一次"
与题目的要求(输出5次"
)不符,这是一个逻辑错误。
分析结果,发现它只执行了i为5的那一次输出。
再次检查程序,发现在for语句的圆括号后面多了一个分号,造成了for语句的循环体实际为空语句。
从源程序中将"
;
去掉,重新存盘、编译、运行。
结果如下:
time1:
time2:
time3:
time4:
发现还少输出一次"
,将循环变量的结束条件为"
6"
,重新存盘、编译,运行正确。
(1)变量i在程序中起到什么作用?
(2)如果将i的初值改设为0,那么应如何改写终止循环的条件?
(3)如果将i的初值改设为3,那么应如何改写终止循环的条件?
实验五 数组
1.掌握Java中数组的声明、创建、初始化和使用。
2.了解Java中提供的对数组排序的常用方法。
3.了解在数组中查找一个特定的值的常用方法。
1.数组元素的排序是一个经常会遇到的问题,冒泡(起泡)排序法(bubblesort)是一种常用的排序方法。
它的基本思想是:
对一个具有n个元素的数组,首先将第一个元素的值和第二个元素的值进行比较,若为逆序(即第一个元素的值大于第二个元素的值),则将两个元素交换之,然后比较第二个元素和第三个元素的值,依次类推,直到第n-1个元素和第n个元素进行比较、交换为止。
如此经过一趟排序,使得值最大元素被安置到最后一个元素的位置上。
然后,对前n-1个元素进行同样的操作,则具有次大值的元素被安置在第n-1个元素的位置上。
重复以上过程直到没有元素需要交换为止。
此过程可图示如下:
初始数组元素:
[49386597761327]
第1趟排序之后:
[384965761327]97
第2趟排序之后:
[3849651327]7697
第3趟排序之后:
[38491327]657697
第4趟排序之后:
[381327]49657697
第5趟排序之后:
[1327]3849657697
第