面向对象程序设计实验指导书.docx
《面向对象程序设计实验指导书.docx》由会员分享,可在线阅读,更多相关《面向对象程序设计实验指导书.docx(37页珍藏版)》请在冰豆网上搜索。
面向对象程序设计实验指导书
《面向对象程序设计(Java)》实验指导书
实验名称:
面向对象程序设计
实验类型:
综合性
学 时:
20
适用对象:
实验一Java大、小程序的应用程序
一、实验目的
熟悉Java开发环境,并让学生掌握开发JAVA应用程序的三个步骤:
编写源文件、编译源文件和运行应用程序。
二、实验要求
分别编写一个Java应用程序和JavaApplet应用程序,输出两行文字:
“你好,很高兴学习Java”和“Wearestudents”。
三、实验模板
按模板要求,将代码1和代码2替换为程序代码。
模板1:
Hello.java
publicclassHello
{
publicstaticvoidmain(Stringargs[])
{
代码1//命令行窗口输出“你好,很高兴学习Java”
Aa=newA();
a.fA();
}
}
classA
{
voidfA()
{
代码2//命令行窗口输出“Wearestudents”
}
}
模板2:
FirstApplet.java
importjava.applet.*;
importjava.awt.*;
publicclassFirstAppletextendsApplet
{
publicvoidpaint(Graphicsg)
{
g.setColor(Color.blue);
代码1//在JavaApplet中绘制一行文字:
“你好,很高兴学习Java”
g.setColor(Color.red);
g.setFont(newFont("宋体",Font.BOLD,36);
代码2//绘制一行文字:
“Wearestudents”
}
}
四、实验环境
JDK和Eclipse软件开发环境。
五、实验步骤
1.打开一个文本编辑器。
如“记事本”。
2.按“程序模板”输入源程序。
3.保存源文件。
注意程序名要与程序中的主类名一致。
4.打开命令窗口编译源程序。
使用javac命令。
5.运行程序。
1)对于大程序的运行,直接使用java命令。
2)对于小程序的运行,则需编写一个html文件,如FirstApplet.html,内容如下:
用浏览器或appletviewer打开FirstApplet.html文件。
六、思考题
1.程序中的主类如果不用public修饰,编译能通过吗?
2.程序中的主类如果不用public修饰,程序能正确运行吗?
3.编译器怎样提示将String写成string这一错误?
4.程序将paint()方法误写成Paint(),编译能通过吗?
运行时能看到有关的输出信息吗?
5.程序中如果没有“importjava.awt.*”语句,编译时会出现哪些错误提示?
实验二从键盘输入数据
一、实验目的
让学生掌握从键盘输入基本类型的数据。
二、实验要求
分别编写一个Java应用程序,用户从键盘输入一个浮点数据,程序将输出这个数的平方和三次方。
三、实验模板
按模板要求,将代码1、代码2和代码3替换为程序代码。
InputFloat.java
importjava.util.*;
publicclassInputFloat
{
publicstaticvoidmain(Stringargs[])
{
doublea,b,c;
Scannerreader=newScanner(System.in);
System.out.println("从键盘输入一个浮点数");
【代码1】//reader调用方法读取用户从键盘输入的数据,并赋值给a
b=a*a;
c=a*a*a;
【代码2】//输出b
【代码3】//输出c
}
}
四、思考题
1.语句bytex=128;能通过编译吗?
2.intx=(byte)128;程序输出变量x的值是多少?
3.程序运行时,用户从键盘输入abc,程序提示怎样的错误?
实验三表达式与循环语句
(一)
一、实验目的
让学生使用if-else分支和while循环语句解决问题。
二、实验要求
分别编写一个Java应用程序,实现如下功能:
随机分配一个1~100之间的整数;用户从键盘输入自己的猜测;程序返回信息分别是“猜大了”、“猜小了”和“猜对了”;根据提示再次输入数据,直到信息为“猜对了”为止。
三、实验模板
按模板要求,将【代码1】~【代码6】替换为Java程序代码。
importjava.util.*;
publicclassGuessNumber
{
publicstaticvoidmain(Stringargs[])
{
System.out.println("给你一个1至100之间的整数,请猜测这个数");
intrealNumber=(int)(Math.random()*100)+1;
intyourGuess=0;
Scannerreader=newScanner(System.in);
System.out.println("输入您的猜测:
");
【代码1】//reader调用方法获取用户从键盘键入的整数,并赋值给yourGuess
while(【代码2】)//循环条件。
{
if(【代码3】)//条件代码。
{
System.out.println("猜大了,请再猜:
");
【代码4】//reader调用方法获取用户从键盘键入的整数,并赋值给yourGuess
}
elseif(【代码5】)//条件代码
{
System.out.println("猜小了,请再猜:
");
【代码6】//reader调用方法获取用户从键盘键入的整数,并赋值给yourGuess
}
}
System.out.println("猜对了!
");
}
}
四、思考题
1.用“yourGuess>realNumber”替换代码2可以吗?
2.省略代码4或代码6,程序运行会出现怎样的结果?
3.语句System.out.println("猜对了!
");为何要放在while循环语句之后,放在while语句的循环体中合理吗?
实验三表达式与循环语句
(二)
一、实验目的
让学生使用if-elseif多分支语句。
二、实验要求
分别编写一个Java应用程序,输入一个1~99999之间的整数;程序判断这是个几位数;并判断这个数是否是回文数(将该数含有的数字逆序排列后得到的数和原数相同,如12121和3223都是回文数)。
三、实验模板
按模板要求,将【代码1】~【代码9】替换为Java程序代码。
Number.java
importjava.util.*;
publicclassNumber
{
publicstaticvoidmain(Stringargs[])
{
intnumber=0,d5,d4,d3,d2,d1;
Scannerreader=newScanner(System.in);
System.out.println("从键盘输入一个1至99999之间的数");
while(reader.hasNextInt())
{
number=reader.nextInt();
if(【代码1】)//判断number在1至99999之间的条件
{
【代码1】//计算number的最高位(万位)d5
【代码2】//计算number的千位d4
【代码3】//计算number的百位d3
d2=number%100/10;
d1=number%10;
if(【代码4】)//判断number是5位数的条件
{
System.out.printf("\n%d是5位数",number);
If(【代码5】)//判断number是回文数的条件
{
System.out.printf("\t%d是回文数",number);
}
else
{
System.out.printf("\t%d不是回文数",number);
}
}
elseif(【代码6】)//判断number是4位数的条件
{
System.out.printf("\n%d是4位数",number);
If(【代码7】)//判断number是回文数的条件码
{
System.out.printf("\t%d是回文数",number);
}
else
{
System.out.printf("\t%d不是回文数",number);
}
}
elseif(【代码8】)//判断number是3位数的条件
{
System.out.printf("\n%d是3位数",number);
If(【代码9】)//判断number是回文数的条件
{
System.out.printf("\t%d是回文数",number);
}
else
{
System.out.printf("\t%d不是回文数",number);
}
}
elseif(d2!
=0)
{
System.out.printf("\n%d是2位数",number);
if(d1==d2)
{
System.out.printf("\t%d是回文数",number);
}
else
{
System.out.printf("\t%d不是回文数",number);
}
}
elseif(d1!
=0)
{
System.out.printf("\n%d是1位数",number);
System.out.printf("\t%d是回文数",number);
}
}
else
{
System.out.printf("\n%d不在1至99999之间",number);
}
System.out.printf("%n可继续输入整数,或输入非整数结束程序%n");
}
System.out.println("你输出的数据不是整数");
}
}
四、问答题
1.运行时输入23.89,程序提示怎样的信息?
2.运行时输入1221,程序提示怎样的信息?
3.运行时输入123456,程序提示怎样的信息?
4.运行时输入32567,程序提示怎样的信息?
实验四类与对象
(一)
一、实验目的
让学生学习使用类来封装对象的属性和功能。
二、实验要求
编写一个Java应用程序,该程序有3个类:
Trangle,Lader和Circle,分别用来刻画“三角形”、“梯形”和“圆形”。
具体要求:
(1)Trangle类具有类型为double的三个边以及周长、面积属性,Trangle类具有返回周长、面积以及修改三条边的功能。
另外,Trangle类还具有一个boolean类型的属性,该属性用于判断三个数能否构成一个三角形。
(2)Lader类具有类型为double的上底、下底、高、面积属性,具有返回面积的功能。
(3)Circle类具有类型为double的半径、周长和面积属性,具有返回周长、面积的功能。
三、实验模板
按模板要求,将【代码1】~【代码25】替换为Java程序代码。
AreaAndLength.java
classTrangle
{
doublesideA,sideB,sideC,area,length;
booleanboo;
publicTrangle(doublea,doubleb,doublec)
{
【代码1】//参数a,b,c分别赋值给sideA,sideB,sideC
if(【代码2】)//a,b,c构成三角形的条件表达式
{
【代码3】//给boo赋值
}
else
{
【代码4】//给boo赋值
}
}
doublegetLength()
{
【代码5】//方法体,要求计算出length的值并返回
}
publicdoublegetArea()
{
if(boo)
{
doublep=(sideA+sideB+sideC)/2.0;
area=Math.sqrt(p*(p-sideA)*(p-sideB)*(p-sideC));
returnarea;
}
else
{
System.out.println("不是一个三角形,不能计算面积");
return0;
}
}
publicvoidsetABC(doublea,doubleb,doublec)
{
【代码6】//参数a,b,c分别赋值给sideA,sideB,sideC
if(【代码7】)//a,b,c构成三角形的条件表达式
{
【代码8】//给boo赋值。
}
else
{
【代码9】//给boo赋值
}
}
}
classLader
{
doubleabove,bottom,height,area;
Lader(doublea,doubleb,doubleh)
{
【代码10】//方法体
}
doublegetArea()
{
【代码11】//方法体,,要求计算出area返回
}
}
classCircle
{
doubleradius,area;
Circle(doubler)
{
【代码12】//方法体
}
doublegetArea()
{
【代码13】//方法体,要求计算出area返回
}
doublegetLength()
{
【代码14】//getArea方法体的代码,要求计算出length返回
}
voidsetRadius(doublenewRadius)
{
radius=newRadius;
}
doublegetRadius()
{
returnradius;
}
}
publicclassAreaAndLength
{
publicstaticvoidmain(Stringargs[])
{
doublelength,area;
Circlecircle=null;
Trangletrangle;
Laderlader;
【代码15】//创建对象circle
【代码16】//创建对象trangle
【代码17】//创建对象lader
【代码18】//circle调用方法返回周长并赋值给length
System.out.println("圆的周长:
"+length);
【代码19】//circle调用方法返回面积并赋值给area
System.out.println("圆的面积:
"+area);
【代码20】//trangle调用方法返回周长并赋值给length
System.out.println("三角形的周长:
"+length);
【代码21】//trangle调用方法返回面积并赋值给area
System.out.println("三角形的面积:
"+area);
【代码22】//lader调用方法返回面积并赋值给area
System.out.println("梯形的面积:
"+area);
【代码23】//trangle调用方法返修改三个边的代码,要求将三个边修改为12,34,1
【代码24】//trangle调用方法返回面积并赋值给area
System.out.println("三角形的面积:
"+area);
【代码25】//trangle调用方法返回周长并赋值给length
System.out.println("三角形的周长:
"+length);
}
}
四、分析与理解
1.创建一个对象时,成员变量被分配内存空间,这些内存空间称为该对象的实体或变量,而对象中存放着引用,以确保这些变量由该对象操作使用。
2.空对象不能使用,即不能让一个空对象去调用方法产生行为。
由于对象动态地分配实体,所以Java的编译器对空对象不做检查。
因此,在编写程序时要避免使用空对象。
五、实验内容
1.程序中仅省略代码15,编译能通过吗?
2.程序中仅省略代码16,编译能通过吗?
3.给Trangle类增加3个方法,分别用来返回3个边:
sideA,sideB和sideC。
4.让AreaAndLength类中的circle对象调用方法修改半径,然后输出修改后的半径以及修改半径后的圆的面积和周长。
实验四类与对象
(二)
一、实验目的
让学生掌握类变量与实例变量,以及类方法与实例方法的区别。
二、实验要求
按程序模板的要求编写源文件,特别注意程序的输出结果,并能正确地解释输出的结果。
三、实验模板
按模板要求,将【代码1】~【代码14】替换为Java程序代码。
Example.java
classA
{
【代码1】//声明一个float型实例变量:
a
【代码2】//声明一个float型类变量:
b
voidsetA(floata)
{
【代码3】//将参数a的值赋值给成员变量a
}
voidsetB(floatb)
{
【代码4】//将参数b的值赋值给成员变量b
}
floatgetA()
{
returna;
}
floatgetB()
{
returnb;
}
voidinputA()
{
System.out.println(a);
}
staticvoidinputB()
{
System.out.println(b);
}
}
publicclassExample
{
publicstaticvoidmain(Stringargs[])
{
【代码5】//通过类名操作类变量b,并赋值100
【代码6】//通过类名调用方法inputB()
Acat=newA();
Adog=newA();
【代码7】//cat象调用方法setA(inta)将cat的成员a的值设置为200
【代码8】//cat调用方法setB(intb)将cat的成员b的值设置为400
【代码9】//dog象调用方法setA(inta)将dog的成员a的值设置为200
【代码10】//dog调用方法setB(intb)将dog的成员b的值设置为400
【代码11】//cat调用inputA()
【代码12】//cat调用inputB()
【代码13】//dog调用inputA()
【代码14】//dog调用inputB()
}
}
四、实验内容
1.将inputA()方法中的System.out.println(a);改写为System.out.println(a+b);编译是否出错?
为什么?
2.将inputB()方法中的System.out.println(b);改写为System.out.println(a+b);编译是否出错?
为什么?
实验四类与对象(三)
一、实验目的
让学生掌握package和import语句。
二、实验要求
1.按实验要求使用package语句,并用import语句使用Java平台提供的包中的类以及自定义包中的类。
2.掌握一些重要的操作步骤。
三、实验模板
1)模板1
将模板1给出的Java源文件命名为Trangle.java,将编译后得到的字节码文件复制到C:
/1000/tom/jiafei目录中。
Trangle.java
packagetom.jiafei;
publicclassTrangle
{
doublesideA,sideB,sideC;
booleanboo;
publicTrangle(doublea,doubleb,doublec)
{
sideA=a;sideB=b;sideC=c;
if(a+b>c&&a+c>b&&c+b>a)
{
System.out.println("我是一个三角形");
boo=true;
}
else
{
System.out.println("我不是一个三角形");
boo=false;
}
}
publicvoid计算面积()
{
if(boo)
{
doublep=(sideA+sideB+sideC)/2.0;
doublearea=Math.sqrt(p*(p-sideA)*(p-sideB)*(p-sideC));
System.out.println("是一个三角形,能计算面积");
System.out.println("面积是:
"+area);
}
else
{
System.out.println("不是一个三角形,不能计算面积");
}
}
publicvoid修改三边(doublea,doubleb,doublec)
{
sideA=a;sideB=b;sideC=c;
if(a+b>c&&a+c>b&&c+b>a)
{
boo=true;
}
else
{
boo=false;
}
}
}
2)模板2
将模板2的Java源程序保存到D:
\2000中。
在编译模板2之前,要重新设置classpath.。
假设本地机SDK的安装目录是E:
\jdk1.5,在命令行执行如下命令:
setclasspath=E:
\jdk1.5\jre\lib\rt.jar;.;c:
\1000
接下来编译模板2源程序。
SunRise.java:
importtom.jiafei.Trangle;
importjava.util.Date;
classSunRise
{
publicstaticvoidmain(Stringargs[])
{
Trangletrangle=newTrangle(12