Java面向对象程序设计实验.docx
《Java面向对象程序设计实验.docx》由会员分享,可在线阅读,更多相关《Java面向对象程序设计实验.docx(18页珍藏版)》请在冰豆网上搜索。
Java面向对象程序设计实验
学号班级姓名
面
向
对
象
程
序
设
计
(Java)实验
方美玉编制
2011.2
常见错误信息
一、编译时错误:
1.javac:
Commandnotfound(命令找不到,或不是内部命令)
指javac.exe、java.exe等java环境参数没有设定或没有安装jdk
2.HelloWorldApp.java:
3:
Methodprintl(java.lang.String)notfoundinclassjava.io.PrintStream.System.out.printl(HelloWorld!
”);
键入的方法名printl不正确,方法prinln()的名字写成了printl。
错误信息中用符号”^”指示系统找不到的方法名,第一行中的第3表示错误所在的行数,即第3行(注释行不计算在内)。
对于系统不认识的标识符号,可能有以下几个原因:
(1)程序员拼写错误,包括大小写不正确;
(2)方法所在的类没有导入到当前的名字空间;
(3)实例所对应的类中没有定义要调用的方法
(4)其它原因
3.HelloWorldApp.java:
1:
PublicclassHelloWorldappmustbedefinedinfilecalled”HelloWorldApp.java”
文件HelloWorldApp.java中的公有类HelloWorldapp名字和文件名不一致。
Java规定,如果.java文件中包含一个公有类,则文件名与类名一致,文件名与类名不一致时会发生该错误。
此例中,名字中的字母a大小写不统一。
4.;expected表示本行缺少分号
5.}expected表示缺少}interfaceexpected表示}多余
二、运行时错误
1.Can’tfindclassHelloWorldApp
系统找不到名为HelloWorldApp的类文件,一般地,该错误意味着类名拼写和原文件名不一样,系统创建filename.java文件时使用的是类名,并且区分大小写
2.InclassHelloWorldApp:
mainmustbepublicandstatic
main左边缺少public和static
3.文件中含有的类个数错误
按java规则,在一个原文件中最多只能有一个public类,否则会发生运行时错误,如果一个文件中有多个公有类,则要把它们各自放到不同的文件中,文件中非公有类的个数不限。
4.层次错误
package语句import语句和类的定义一定要按顺序出现。
实验一Java开发环境
(1)——J2SE
学习视频材料:
1.实验目的
(1)掌握下载和安装J2SE开发工具的方法
(2)熟悉J2SE开发工具的使用
(3)熟悉编写简单的JavaApplication和JavaApplet程序
(4)了解Java源代码、字节码文件,掌握Java程序的编辑、编译和运行过程。
2.实验任务
从网络下载或从CD-ROM直接安装Java开发工具J2SE,编写简单的JavaApplication和JavaApplet程序,编译并运行这两个程序。
3.实验步骤
实验一Java开发环境
(2)——MyEclipse
参见并自学:
MyEclipse中新建和打开项目的操作S1java:
1.实验目的
(1)掌握下载和安装MyEclipse集成开发工具的方法
(2)熟悉MyEclipse集成开发工具的使用
(3)学习编写简单的Java程序
(4)了解Java源代码、字节码文件,掌握Java程序在集成开发环境中的编辑、编译和运行过程。
2.实验任务
从网络下载或从CD-ROM直接安装Java集成开发工具MyEclipse,编写简单的JavaApplication和JavaApplet程序,编译并运行这两个程序。
3.实验步骤
实验二简单Java程序设计
(1)
1.实验目的
(1)学习编写简单的Java程序
(2)学习Java程序中简单字符和图形界面字符和数字数据的输入输出
(3)学习掌握Java基本类型及其计算
2.实验任务
(1)编写字符界面的JavaApplication接收用户输入的一个字符,并把该字符打印在屏幕上。
(2)编写图形界面的JavaApplet,其中包括一个按钮,一个文本域和一个标签,当用户在文本域中输入若干字符并单击按钮时,将用户输入的字符显示在标签上。
(3)编写图形界面的JavaApplication,完成与第
(2)项任务相同的功能。
(4)编写图形界面的JavaApplet,接收用户输入的一个整数型和一个浮点型数,单击按钮求两数之和。
(5)编程实现如下的功能,接收用户输入的一个0~8000之间的年份,输出这一年是否为闰年。
3.实验步骤
(1)键入,运行如下的JavaApplication程序并回答问题
//字符界面下的基本输入输出程序:
SimpleCharInOut.java
importjava.io.*;
publicclassSimpleCharInOut
{
publicstaticvoidmain(Stringargs[]){
charch='';//定义字符变量
System.out.print("Enteracharacterplease:
");//在屏幕上显示提示信息
try{
ch=(char)System.in.read();//接受用户键盘输入的字符并保存
}catch(IOExceptione){};//在变量ch中
System.out.println("You'veenteredcharacter:
"+ch);//输出ch
}
}
运行该程序时屏幕显示什么?
如果不敲击键盘输入字符,程序会如何反应?
如果敲击键盘输入字符但不输入回车,程序会如何反应?
为什么?
如何结束此程序的运行?
如果从键盘输入了一个字符并按回车键,程序输出什么?
如果从键盘输入了多个字符并按回车键,程序又输出什么?
为什么?
(2)键入、运行如下的JavaApplet程序并回答问题
importjava.applet.Applet;
importjava.awt.*;
importjava.awt.event.*;
publicclassSimpleGraphicsInOutextendsAppletimplementsActionListener{
Labelprompt;
TextFieldinput;
Labeloutput;
publicvoidinit(){
prompt=newLabel("Enteracharacterplease:
");
input=newTextField(3);
output=newLabel(““);
add(prompt);
add(input);
add(output);
input.addActionListener(this);
}
publicvoidactionPerformed(ActionEvente)
{
output.setText(“You’veenteredcharacter:
”+input.getText());
}
}
1编写嵌入这个Applet程序的HTML文件SimpleGraphicsInOut.html。
SimpleGraphicsInOut
2在浏览器里打开这个HTML文件,查看JavaApplet在图形界面下的输入输出。
3在文本框中输入文字并按回车观察程序的输出,如果不按回车,是否有输出,为什么?
在文本框中输入多个字符并按回车,输出是什么?
在文本框中输入多个汉字(例如:
输入你的名字)并按回车键,输出是什么?
4把程序里原来的语句:
prompt=newLabel("Enteracharacterplease:
");
改写为下面的语句:
prompt=newLabel("请输入一个或一串字符:
");
保存修改后的.java文件,重新编译(javac)并运行,程序的样子有什么改变?
如果希望输出提示也是中文,如何修改程序?
⑤把程序原来的语句:
input=newTextField(3);
分别先后改为下面的语句:
input=newTextField(6);
和
input=newTextField(“在这里输入’,6);
并分别运行两次修改后的程序,程序的界面有何变化?
体会textField的用法。
(3)键入、运行如下的JavaApplication程序:
GraphicsAppInOut.java
importjava.awt.*;
importjava.awt.event.*;
publicclassGraphicsAppInOut
{
publicstaticvoidmain(Stringargs[]){
ApplctFrameMyFrame=newApplctFrame();
}
}
classApplctFrameextendsFrameimplementsActionListener
{
Labelprompt;
TextFieldinput;
Labeloutput;
ApplctFrame()
{
super("ApplicationGraphicsFrame");
setLayout(newFlowLayout());
prompt=newLabel("Enteracharacterplease:
");
input=newTextField(4);
output=newLabel(““);
add(prompt);
add(input);
add(output);
input.addActionListener(this);
this.addWindowListener(newWindowAdapter()
{
publicvoidwindowClosing(WindowEventwe)
{
System.exit(0);
}
});
setSize(500,100);
setVisible(true);
}
publicvoidactionPerformed(ActionEvente)
{
output.setText(“character”+input.getText());
}
}
1这是一个JavaApplication程序,在命令行运行它,界面会发生什么变化,为什么?
2把程序里原有的语句:
super("ApplicationGraphicsFrame");
改为下面的语句
super("图形界面的JavaApplication程序");
重新运行程序,有何变化?
试着把窗口的标题改成你希望的内容。
3这个Application程序的输入输出功能与上面的Applet程序的输入输出功能是否完全相同?
其输入输出功能与第一个Application相比有何不同?
体会字符界面与图形界面输入输出编程和操作的不同。
本实验中的三种输入输出方法,你喜欢哪一种方法,为什么?
(5)键入、运行如下的JavaApplet程序并回答问题
importjava.applet.*;
importjava.awt.*;
importjava.awt.event.*;
publicclassNumberInputextendsAppletimplementsActionListener{
Labelprompt1=newLabel("请输入整数:
");
Labelprompt2=newLabel("请输入浮点数:
");;
TextFieldinput_int=newTextField(6);
TextFieldinput_double=newTextField(6);
TextFieldoutput=newTextField(35);
ButtonaddBtn=newButon("相加");
intgetInt;
doublegetDouble;
publicvoidinit(){
add(prompt1);
add(input_int);
add(prompt2);
add(input_double);
add(addBtn);
add(output);
addBtn.addActionListener(this);
output.setEditable(false);
}
publicvoidactionPerformed(ActionEventae)
{if(!
(ae.getSource().equals(addBtn)))
return;
getInt=Integer.parseInt(input_int.getText());
getDouble=Double.valueOf(input_double.getText()).doubleValue();
output.setText("整数"+getInt+"和浮点数"+getDouble+"之和为"+(getInt+getDouble))
}
}
1为这个Applet编写HTML文件,运行这个程序观看得到的结果。
2根据图形界面的提示输入相应的整数和浮点数,单击按钮,观看所得到的结果。
3如果像前面的实验一样在文本域里按回车键,而不是单击按钮,程序有什么影响?
为什么?
4如果在应该输入整数的文本域里输入了浮点数,或者在应该输入浮点数的文本域里输入了字母,单击按钮,程序有什么响应?
为什么
5为本实验的代码增加详细的行注释。
实验三简单Java程序设计
(2)
1.实验目的
(3)掌握结构化程序设计的基本结构、分支与循环。
(4)掌握Java程序中方法的定义域调用
(5)学习阅读、辨别和理解编译错误和运行错误,学习基本的排查错误技巧
2.实验任务
(1)编写字符界面的JavaApplication将用户输入的小写字符转化为大写字符打印在屏幕上,若用户输入的不是小写字符则打印信息说明无法完成指定的操作。
(2)编写图形界面的JavaApplet,接受用户输入的正整数,若用户输入的不是正整数则利用一个标签提示错误并要求重新输入,直至得到符合要求的数据。
(3)编写图形界面的JavaApplication,接收用户输入的一个0~100之间的分数,将其转化为1~5的5分计分法。
190~100:
5;
275~89:
4;
360~74:
3;
440~59:
2
5其它:
1。
(4)编写一个JavaApplet程序,从键盘输入一个整数,求出其阶乘值。
(5)计算自然常数e=1+1/1!
+1/2!
+1/3!
+1/4!
+……1/n!
n的取值应保证1/n!
<10-3,利用上一题已有的程序代码,使之成为本题可以调用的方法。
3.实验步骤
实验四类与对象
1.实验目的
(1)掌握结构化程序设计的基本结构、分支与循环。
(2)掌握Java程序中方法的定义域调用
(3)学习阅读、辨别和理解编译错误和运行错误,学习基本的排查错误技巧
2.实验任务
(1)阅读下面的程序,在main方法里添加语句完成如下的功能:
1创建一个MyValue类的对象myValue.
2为myValue对象中的value域赋值10.
3使用getValue()方法获得myValue对象中的数据并将它打印在屏幕上。
classvalue
{
privateintvalue;
publicvoidsetValue(intx)
{
value=x;
}
publicintgetValue()
{
returnvalue;
}
}
publicclassUseValue
{
publicstaticvoidmain(Stringargs[])
{
}
}
(2)试编写Java代码实现一个计数器类Counter,其中包括:
●域counterValue用来保存计数器的当前数值;
●方法increment()计数器加一;
●方法decrement()计数器减一
●方法reset()计数器清零。
对于这个类,你计划定义几个构造函数?
(3)使用计数器类,编程管理会议室投影仪的出借情况。
每新购入一台投影仪或收回一台投影仪,计数器加一;每淘汰一台投影仪,计数器减一。
(4)编程实现矩形类,其中应包括计算矩形周长和面积的方法。
如何使你的定义更好的满足面向对象程序设计中信息隐藏和封装原则?
对于这个类,你计划定义几个构造函数?
(5)使用矩形类,编程统计若干块土地的相关信息。
由用户输入每块土地的长与宽,程序将计算其面积并显示出来。
3.实验步骤
实验五继承与多态
1.实验目的
(1)掌握类的继承关系和派生方法。
(2)掌握多态的概念和使用。
(3)掌握接口的定义与使用。
(4)掌握包的概念与使用
2.实验任务
(1)为实验4中的定义的矩形类派生一个子类:
正方形类。
若正方形类的操作同样是求周长和面积,则这个子类除了从父类那里继承的方法之外,还需要哪些方法?
列出正方形类的所有域和方法。
编程检查、运行所编写的正方形类。
(2)定义接口Printable,其中包括一个方法printItMyWay(),这个方法没有形参,返回值为空。
(3)改写矩形类,使之实现Printable接口,用PrintItMyWay()方法将矩形的相关信息(长、宽、周长、面积)打印在屏幕上。
(4)改写正方形类,重载printItMyWay()方法,将正方形的边长、周长、面积打印在屏幕上。
(5)在Printable接口上增加一个新的printItMyWay(char)方法,这个方法有一个字符类型的形参,返回值为空。
其功能是利用给出的字符打印,例如若给定的字符为#,一个长为5,宽为3的矩形的屏幕打印结果为:
#####
#####
#####
保持矩形不变,编译运行,有什么结果?
为什么?
在矩形中实现新定义的printItMyWay(char)方法,保持正方形不变,编译运行,有什么结果?
为什么?
(6)将矩形和正方形组织成一个包MyFigure。
3.实验步骤
实验六数组、向量和字符串
1.实验目的
(1)掌握基本数据类型的概念和使用。
(2)掌握和利用Math类实现基本数学运算的方法。
(3)掌握数组的概念和使用。
(4)掌握字符串的概念和使用。
2.实验任务
(1)变成接收用户输入的一个正浮点数,随机生成一个不大于该数的正整数,在屏幕上打印输出。
(2)试用数组实现一个10到20的平方表,打印输出这个平方表。
(3)编程记录用户输入的一组正整数据,-1表示输入结束。
求这些数据的平均值,并统计大于平均的数据个数,这个问题应该选用数组还是向量实现?
为什么?
。
(4)编写图形界面的程序,接收用户输入的一个字符串和一个字符,将字符串中出现的所有该字符删除,打印输出新生成的结果字符串。
(5)编写一个JavaApplication,将用户输入的命令行参数一个一行打印输出。
(6)试编写一个一JavaApplet程序,接受用户输入的一个文件名,然后截取其后缀,根据其后缀判断文件类型。
例如后缀为.java的是Java源程序文件,后缀是.txt的是文本文件。
注意提高程序的容错性。
3.实验步骤
实验七排序与查找
1.实验目的
(1)掌握排序与查找的基本概念。
(2)掌握基本的排序方法,了解它们各自的特点。
(3)掌握基本的查找方法。
(4)了解不同算法之间的运算复杂度及其对程序的影响。
2.实验任务
(1)编写字符界面的程序,接收用户输入的若干个正整数,-1表示输入结束。
使用冒泡方法将输入的数据序列降序排序,并打印每一次扫描后的结果。
运行时使用不同的数据序列观察其执行结果:
1序列中只有一个数据。
2序列中有重复的数据。
3序列中的数据输入时按升序排列。
4序列中的数据输入时按降序排列。
(2)使用选择或插入排序方法实现上面的要求。
(3)编程接收用户输入的若干数据,将它们降序排列。
再接收用户输入的一个数字,使用对分法在序列中查找该数据并输出查找结果。
(4)编写Applet实现猜数游戏,游戏开始时程序给出一个范围,例如0~200,并随机生成该范围内的一个数,例如174.程序将范围显示给用户,将所生成的数隐藏起来要求用户猜这个数的数值。
用户在一个文本域中输入自己所猜的数值后,程序就告诉用户所猜测的数字是太大还是太小。
例如若用户猜100,则太小;若猜190,则太大。
用户可根据提示继续猜测,直至猜中;程序则输出用户一共猜了几次。
想一想,什么是使猜测次数最小的策略?
为什么?
(5)若由你来出题,计算机来猜数,编写一个程序使所用的猜测次数最小。
3.实验步骤
实验八堆栈、队列与链表
1.实验目的
(1)了解常用数据结构的概念与使用。
(2)掌握堆栈的概念与使用。
(3)掌握队列的概念与使用。
(4)掌握链表的概念与使用。
2.实验任务
(1)编程实现自己的通用链表类。
并编程检查其插入、删除、查找功能。
(2)利用链表实现自己的通用队列类。
(3)利用Java.util包中的堆栈Stack实现下面的功能:
接受用户输入的阿拉伯数字,输出相应的汉字。
例如输入“1234”,则输出“一千二百3拾四”。
(4)利用堆栈和队列讲一个普通的四则算术变大时转化成逆波兰表达式,即把所有的运算数排在运算符之前。
例如“a+b”的逆波兰表达式是“ab+”;“a*b+c”的逆波兰表达式是“ab*c+”;“a+b*c”的逆波兰表达式是“abc*+”。
为简化问题,这里暂不考虑括号的问题,只考虑加、减、乘、除四种运算,且定义每个运算数都只有一个字母。
(提示:
把四则表达式入队,再逐一字符出队,放入第二个队列。
若出队的字符是运算数,则直接进入第二队列;若出队的字符是运算符,则将它与堆栈顶部已有的运算符进行运算优先级比较,根据比较结果决定是否将栈顶的运算符弹栈并排入第二队列,然后将第一个队列出队的运算符压栈。
)
(5)计算逆波兰表达式的运算结果,基本方法为:
将逆波兰表达式中运算数逐一压入堆栈,当遇到运算符时则把当前堆栈中的头两个运算数弹栈,完成运算后将结果再压栈。
例如对于逆波兰表达式“abc*-”,当程序扫描到运算符“*”时,堆栈中已经保存了运算数,其中c在栈顶,