Java实验指导书.docx
《Java实验指导书.docx》由会员分享,可在线阅读,更多相关《Java实验指导书.docx(47页珍藏版)》请在冰点文库上搜索。
Java实验指导书
虞山学院
《Java程序设计》实验指导及报告书
/学年第学期
姓名:
______________
学号:
______________
班级:
______________
指导教师:
______________
计算机科学与工程学院
2009
实验
实验一创建简单的JAVA应用程序2
实验二选择和循环2
实验三数组和字符串处理2
实验四类和对象编程
(一)2
实验五类和对象编程
(二)2
实验六继承与多态编程2
实验七接口和集合2
实验八文件和输入输出2
实验一创建简单的JAVA应用程序
一、实验目的
1.了解JAVA基本程序结构;
2.熟悉命令行方式下JAVA应用程序编写、编译、调试和执行过程;
3.了解Eclipse集成开发环境的功能和特点。
二、实验内容
1.安装并配置JDK开发工具包
2.调试并运行下列Hello,world程序,并写出运行结果:
(各文件统一按照注释行上的文件名进行命名)
版本一、
//HelloJava1.java
publicclassHelloJava1
{
publicstaticvoidmain(String[]args)
{
System.out.println(“Hello!
\nWorld.”);
}
}
存盘后(假设存在d:
\)
(1)编译
d:
\>javacHelloJava1.java
(2)由虚拟机解释执行
d:
\>javaHelloJava1
运行结果(注意,按照屏幕输出格式写):
(3)程序不以HelloJava1.java命名,编译能通过吗?
为什么?
版本二、
//HelloJava2.java
importjavax.swing.*;//导入JFrame和JLabel类所在的包
publicclassHelloJava2
{
publicstaticvoidmain(String[]args)
{
//新建一个JFrame对象以便在屏幕上显示一个窗口。
JFrameframe=newJFrame(“HelloJava!
”);
frame.setSize(300,300);//设置窗口的高度和宽度。
frame.setVisible(true);//设置窗口可见。
}
}
运行结果(注:
按Ctrl+C退出程序):
版本三、
在版本二的基础上增加两条语句,编译、运行查看效果。
//HelloJava3.java
importjavax.swing.*;//导入JFrame和JLabel类所在的包
publicclassHelloJava3
{
publicstaticvoidmain(String[]args)
{
JFrameframe=newJFrame(“HelloJava!
”);
// 增加一个标签,来保存一个文本,从而可在窗口中央显示文本。
JLabellabe1=newJLabel(“HelloJava!
”,JLabel.CENTER);
//把标签label加入到窗口frame中。
frame.getcontentPane().add(label);
frame.setSize(300,300);
frame.setVisible(true);
}
}
运行结果(注:
按Ctrl+C退出程序):
将程序中JLabel.CENTER改为JLabel.LEFT或JLabel.RIGHT运行效果有何变化?
版本四、
编写并运行基于浏览器的Applet小应用程序
Step1:
编写如下代码,并以HelloApplet.java存盘。
importjava.applet.*;
importjava.awt.*;
publicclassHelloAppletextendsApplet
{
publicvoidpaint(Graphicsg)
{
g.drawString(“HelloWorld.”,50,50);
}
}
Step2:
编译生成HelloApplet.class字节码文件。
Step3:
编写如下代码,并以HelloExam.html(网页)存盘。
MyFirstJavaApplet
Step4:
用IE打开该网页,查看运行效果。
Step5:
D:
\>appletviewerHelloExam.html来启动Applet小应用查看运行效果。
(注HelloApplet.class文件和HelloExam.html在同一目录下。
)
3.调试并运行下面程序,并写出运行结果:
//StarTriangle.java
publicclassStarTriangle
{publicstaticvoidmain(String[]args)
{
inti,j;
for(i=0;i<=3;i++)
{
for(j=0;j<=2-i;j++)
System.out.print("");//一个空格
for(intk=0;k<=2*i;k++)
System.out.print("*");
System.out.println();//输出换行
}
}
}
运行结果(注意,按照屏幕输出格式写):
4.下面是一个模拟计算器的程序(两个操作数都为正整数)。
计算器应该能够执行以下算术操作:
加法、减法、乘法、除法中的一种。
调试并运行下面程序,根据输入写出运行结果。
注意:
程序输入时要区分大小写。
//TestCalc.java
importjava.util.*;//Scanner类在此包中,故需导入
classCalcNumber
{
privateintnumber1,number2;
privateintoption;
privateintresult;
publicvoidcompute()
{
Scannerscanner=newScanner(System.in);
System.out.println(“EntertheFirstNumber:
”);
number1=scanner.nextInt();
System.out.println(“EntertheSecondNumber:
”);
number2=scanner.nextInt();
System.out.println(“MainMenu”);
System.out.println(“1.Addition”);
System.out.println(“2.Subtraction”);
System.out.println(“3.Multiplication”);
System.out.println(“4.Division”);
System.out.println(“EntertheOperationyouwanttoperform:
”);
option=scanner.nextInt();
switch(option)
{
case1:
result=number1+number2;
break;
case2:
result=number1-number2;
break;
case3:
result=number1*number2;
break;
case4:
result=number1/number2;
break;
default:
System.out.println(“InvalidOption”);
return;
}
System.out.println(“Theresultis:
”+result);
}
}
publicclassTestCalc
{
publicstaticvoidmain(String[]args)
{
CalcNumbermyCalc=newCalcNumber();
myCpute();
}
}
从键盘输入8和2两个整数时,
(1)选择3时的运行结果:
(2)选择5时的运行结果:
从键盘输入8和two时(第二个数为非整数),程序运行结果:
5.在保持功能不变的情况下,改写上例代码如下(注意修改的代码):
importjava.util.*;
classCalcNumber
{privateintnumber1,number2;
privateintoption;
privateScannerscanner=newScanner(System.in);
publicvoidgetNumber()
{
System.out.println(“EntertheFirstNumber:
”);
number1=scanner.nextInt();
System.out.println(“EntertheSecondNumber:
”);
number2=scanner.nextInt();
}
publicvoidgetOption()
{
System.out.println(“MainMenu”);
System.out.println(“1.Addition”);
System.out.println(“2.Subtraction”);
System.out.println(“3.Multiplication”);
System.out.println(“4.Division”);
System.out.println(“EntertheOperationyouwanttoperform:
”);
option=scanner.nextInt();
}
publicintcompute()
{
intresult;
switch(option)
{
case1:
result=number1+number2;
break;
case2:
result=number1-number2;
break;
case3:
result=number1*number2;
break;
case4:
result=number1/number2;
break;
default:
thrownewIllegalArgumentException(“InvalidOption”);
}
returnresult;
}
}
publicclassTestCalc
{
publicstaticvoidmain(String[]args)
{
try
{
CalcNumbermyCalc=newCalcNumber();
myCalc.getNumber();
myCalc.getOption();
intresult=myCpute();
System.out.println(“Theresultis:
”+result);
}
catch(Exceptione)
{
System.out.println(e.toString());
}
}
}
比较与上例运行结果,是否完全相同:
从键盘输入8和2两个整数时,
选择3时的运行结果:
选择5时的运行结果:
从键盘输入8和two时(第二个数为非整数),程序运行结果:
在main()函数中如不加try和catch部分代码,运行结果又会怎样?
体会程序5的结构与程序4相比哪一个好,谈谈你的理解?
三、教师评分
实验预习
20%
实验过程
20%
实验结果
30%
实验报告
30%
总成绩
实验二选择和循环
一、实验目的
1.掌握Java基本数据类型和表达式的特点和用法。
2.熟练掌握单分支、双分支、多分支选择语句的格式与功能,能正确选取选择语句来设计选择结构的程序。
3.熟练掌握while、do-while、for、break语句、continue语句的格式和功能;并能根据循环结构的要求正确选取循环语句来实现循环和多重循环。
二、预习内容
1.Java基本数据类型有哪几种?
2.从存储角度看Java将变量的类型分为基本数据类型和引用类型,它们两者有何区别(举例说明)?
3.学习查阅JDK文档,找到Random类和Math类,说明它们分别在什么包当中,并了解它们的用法。
三、实验内容
1.调试并运行下面程序,写出运行结果:
//ThrowRoll.java
importjava.util.*;
publicclassThrowRoll
{publicstaticvoidmain(String[]args)
{introll;
Randomrd=newRandom();//创建一个生成随机数的对象rd
System.out.println("开始掷筛子");
for(intcount=0;count<5;count++)
{//rd.nextInt(n)生成[0,n-1]之间的随机整数
roll=1+rd.nextInt(6);//生成1-6的随机整数
System.out.print("第"+count+"次:
"+roll+"");
switch(roll)
{case1:
case3:
case5:
System.out.print("筛子是奇数\t");break;
case2:
case4:
case6:
System.out.print("筛子是偶数\t");break;
}
System.out.println(“它的平方根是:
”+Math.sqrt(roll));
}
}
}
程序运行结果:
2.某服装店经营套服,也单件出售,若买的不少于50套,每套80元,不足50套,每套90元,若只买上衣每件60元,只买裤子每条45元,从键盘读入所买上衣coat和裤子trousers件数,计算应付款money?
提示:
(1)先计算成套的衣服多少钱?
(2)再计算剩下的单件的上衣、单件的裤子多少钱;
(3)计算总付款
将程序补充完整:
//CalcPay.java
importjava.util.*;
publicclassCalcPay
{publicstaticvoidmain(String[]args)
{intcoat,trousers,money;
Scannerscanner=newScanner(System.in);
System.out.println(“Entercoatnumber:
”);
coat=scanner.nextInt();
System.out.println(“Entertrousersnumber:
”);
trousers=scanner.nextInt();
money=getPay(coat,trousers);
System.out.println(“totalmoney=”+money);
}
publicstaticintgetPay(intc,intt)
{
}
}
要求用以下三套测试数据测试程序:
a)coat:
55,trousers:
70
b)coat:
55,trousers:
40
c)coat:
-5,trousers:
3,此时应显示错误信息
运行结果分别是:
3.编程输入年份月份,打印该月的天数
变量命名要求:
年份:
year;月份:
month;计算结果:
天数days
程序代码:
输入
年份:
2008;月份:
10,运行结果:
年份:
2008;月份:
2,运行结果:
年份:
2009;月份:
9,运行结果:
年份:
2009;月份:
2,运行结果:
年份:
2009;月份:
99,运行结果:
4.计算机来当一年级的算术老师,要求给出十道两位数的四则运算的算术题,每道题10分,学生输入该题的答案,计算机根据学生的答案判断正确与否,当结束时给出成绩。
(提示:
用Random类产生两个两位数的随机数)
程序代码:
四、实验小结
谈谈本次实验的心得、体会?
五、选做实验
编写一个程序打印九九乘法表
1×1=1
2×1=22×2=4
3×1=33×2=63×3=9
4×1=44×2=84×3=124×4=16
…
六、教师评分
实验预习
20%
实验过程
20%
实验结果
30%
实验报告
30%
总成绩
实验三数组和字符串处理
一、实验目的
1.要求掌握一维数组、多维数组(主要指二维)的创建、初始化、数组元素的引用等方法。
2.掌握冒泡排序算法。
3.掌握二分查找算法。
4.掌握字符串处理的相关方法。
二、预习内容
1.如何创建一个能存放十个整数的一维数组intArr?
2.如何创建一个如下图的不等长的存放整数的二维数组jagArr?
2
1
5
4
3
0
9
8
7
6
3.查阅JDK文档,至少写出String类的五个方法,并说明这些方法的作用?
三、实验内容
1.实现对从键盘输入一批非零整数,以-1作为输入结束标记,对这批整数进行排序。
要求:
1)用选择或冒泡升序排
2)从控制台获取数据、排序、输出数组功能分别做成三个方法。
3)安排方法的调用,注意方法调用时参数的传递。
程序代码:
2.数组A中的N(0如A=(78,42,-34,94,25)则输出为(4,3,1,5,2)。
数组长度N和数组中元素要求从键盘输入。
程序代码:
3.已知一个已经从小到大排序的数组,这个数组中的一个平台就是指连续的一串值相同的元素,并且这一串元素不能再延伸,例如,在1,2,2,3,3,3,3,4,4,5,5,5,6中1,2,2,3,3,3,3,4,4,5,5,5,6划线部分都是一个平台,试编写程序,接收任意一个已排好序数组,把这个数组中最长的平台找出来。
在上面的例子中3,3,3,3就是该数组中最长的平台,平台长为4。
4.调试下列代码,写出运行结果。
publicclassExample
{publicstaticvoidchange(Stringstr,char[]ch)
{
str=“testok”;
ch[0]=‘g’;
}
publicstaticvoidmain(String[]args)
{
Stringstr=“good”;
char[]ch={‘a’,’b’,’c’};
change(str,ch);
System.out.print(str+“and“);
System.out.println(ch);
}
}
运行结果是testokandgbc吗?
为什么?
请分析原因:
5.调试下列代码,写出运行结果,分析程序的功能。
classDeleteStr
{publicstaticStringDel(Stringorigin,Stringsmod)
{if(origin!
=null&&smod!
=null)
{
intindex=origin.indexOf(smod);
while(index!
=-1)
{
Stringret=origin.substring(0,index);
ret=ret+origin.substring(index+smod.length());
origin=ret;
index=origin.indexOf(smod);
}
returnorigin;
}
else
returnnull;
}
}
publicclassProgram
{
publicstaticvoidmain(String[]args)
{Stringstr="hellxyzo,wxyzoxyzrldxyz.";
Stringsmod="xyz";
StringnewString;
newString=DeleteStr.Del(str,smod);
System.out.println(newString);
}
}
运行结果:
程序完成什么样功能?
六、教师评分
实验预习
20%
实验过程
20%
实验结果
30%
实验报告
30%
总成绩
实验四类和对象编程
(一)
一、实验目的
1.掌握Java中类的定义、对象的创建方法;
2.理解封装性及其意义;
3.掌握构造函数的含义与作用、定义方式和实现,能够根据要求正确定义和重载构造函数。
4.能够根据给定的要求定义类并实现类的成员函数;
5.理解类的成员的访问控制的含义,公有、私有和保护成员的区别
二、实验内容
1.定义一个学生类,其中有学号、姓名、年龄3个数据成员,以及若干成员函数。
同时编写主函数使用这个类,实现对学生数据的赋值和输出。
要求:
使用构造函数实现对数据的输入,使用成员函数实现对数据的输出。
调试下列的参考代码。
//Student.java
publicclassStudent
{privateStringid;
privateStringname;
privateintage;
publicStudent(Stringid,Stringname,intage)
{
this.id