收藏 分销(赏)

Java实验指导书.doc

上传人:s4****5z 文档编号:8895395 上传时间:2025-03-07 格式:DOC 页数:50 大小:274.50KB 下载积分:10 金币
下载 相关 举报
Java实验指导书.doc_第1页
第1页 / 共50页
Java实验指导书.doc_第2页
第2页 / 共50页


点击查看更多>>
资源描述
虞山学院 《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 public class HelloJava1 { public static void main(String[] args) { System.out.println (“Hello!\nWorld.”); } } 存盘后(假设存在d:\) (1) 编译 d:\> javac HelloJava1.java (2) 由虚拟机解释执行 d:\> java HelloJava1 运行结果(注意,按照屏幕输出格式写): (3) 程序不以HelloJava1.java命名,编译能通过吗?为什么? 版本二、 //HelloJava2.java import javax.swing.*; //导入JFrame和JLabel类所在的包 public class HelloJava2 { public static void main(String[] args) { //新建一个JFrame对象以便在屏幕上显示一个窗口。 JFrame frame = new JFrame (“Hello Java!”); frame.setSize(300,300); //设置窗口的高度和宽度。 frame.setVisible (true); //设置窗口可见。 } } 运行结果(注:按Ctrl+C退出程序): 版本三、 在版本二的基础上增加两条语句,编译、运行查看效果。 //HelloJava3.java import javax.swing.*; //导入JFrame和JLabel类所在的包 public class HelloJava3 { public static void main(String[] args) { JFrame frame = new JFrame (“Hello Java!”); // 增加一个标签,来保存一个文本,从而可在窗口中央显示文本。 JLabel labe1 = new JLabel (“Hello Java!”, 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存盘。 import java.applet.*; import java.awt.*; public class HelloApplet extends Applet { public void paint(Graphics g) { g.drawString(“Hello World.” , 50 , 50); } } Step2: 编译生成HelloApplet.class字节码文件。 Step3: 编写如下代码,并以HelloExam.html(网页)存盘。 <HTML> <HEAD> <TITLE>MyFirstJavaApplet</TITLE> </HEAD> <BODY> <HR> <APPLET CODE=HelloApplet.class WIDTH=400 HEIGHT=200> </APPLET> </BODY> </HTML> Step4: 用IE打开该网页,查看运行效果。 Step5: D:\>appletviewer HelloExam.html来启动Applet小应用查看运行效果。 (注HelloApplet.class文件和HelloExam.html在同一目录下。) 3. 调试并运行下面程序,并写出运行结果: //StarTriangle.java public class StarTriangle { public static void main(String[] args) { int i, j; for (i = 0; i <= 3; i++) { for (j = 0; j <= 2 - i; j++) System.out.print(" "); //一个空格 for (int k = 0; k <= 2 * i; k++) System.out.print("*"); System.out.println(); //输出换行 } } } 运行结果(注意,按照屏幕输出格式写): 4. 下面是一个模拟计算器的程序(两个操作数都为正整数)。计算器应该能够执行以下算术操作:加法、减法、乘法、除法中的一种。调试并运行下面程序,根据输入写出运行结果。 注意:程序输入时要区分大小写。 //TestCalc.java import java.util.*; //Scanner类在此包中,故需导入 class CalcNumber { private int number1,number2; private int option; private int result; public void compute() { Scanner scanner = new Scanner(System .in); System.out.println(“Enter the First Number:”); number1 = scanner.nextInt(); System.out.println(“Enter the Second Number:”); number2 = scanner.nextInt(); System.out.println(“Main Menu”); System.out.println(“1.Addition”); System.out.println(“2.Subtraction”); System.out.println(“3.Multiplication”); System.out.println(“4.Division”); System.out.println(“Enter the Operation you want to perform:”); option = scanner.nextInt(); switch (option) { case 1: result=number1 + number2; break; case 2: result=number1 - number2; break; case 3: result=number1 * number2; break; case 4: result=number1 / number2; break; default: System.out.println(“Invalid Option”); return; } System.out.println(“The result is :” + result); } } public class TestCalc { public static void main(String[] args) { CalcNumber myCalc = new CalcNumber(); myCpute(); } } 从键盘输入8和2两个整数时, (1) 选择3时的运行结果: (2) 选择5时的运行结果: 从键盘输入8和two时(第二个数为非整数),程序运行结果: 5.在保持功能不变的情况下,改写上例代码如下(注意修改的代码): import java.util.*; class CalcNumber { private int number1,number2; private int option; private Scanner scanner = new Scanner(System .in); public void getNumber() { System.out.println(“Enter the First Number:”); number1 = scanner.nextInt(); System.out.println(“Enter the Second Number:”); number2 = scanner.nextInt(); } public void getOption() { System.out.println(“Main Menu”); System.out.println(“1.Addition”); System.out.println(“2.Subtraction”); System.out.println(“3.Multiplication”); System.out.println(“4.Division”); System.out.println(“Enter the Operation you want to perform:”); option = scanner.nextInt(); } public int compute() { int result; switch(option) { case 1: result=number1 + number2; break; case 2: result=number1 - number2; break; case 3: result=number1 * number2; break; case 4: result=number1 / number2; break; default: throw new IllegalArgumentException(“Invalid Option”); } return result; } } public class TestCalc { public static void main(String[] args) { try { CalcNumber myCalc = new CalcNumber(); myCalc.getNumber(); myCalc.getOption(); int result = myCpute(); System.out.println(“The result is :” + result); } catch(Exception e) { 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 import java.util.*; public class ThrowRoll { public static void main(String[] args) { int roll ; Random rd = new Random(); //创建一个生成随机数的对象rd System.out.println("开始掷筛子"); for(int count=0; count<5; count++) { //rd .nextInt(n)生成[0,n-1]之间的随机整数 roll = 1+rd.nextInt(6); //生成1-6的随机整数 System.out.print ("第"+count+"次:"+roll+" "); switch (roll) { case 1: case 3: case 5: System.out.print ("筛子是奇数\t");break; case 2: case 4: case 6: 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 import java.util.*; public class CalcPay { public static void main(String[] args) { int coat,trousers,money; Scanner scanner = new Scanner(System.in); System.out.println(“Enter coat number:”); coat = scanner.nextInt(); System.out.println(“Enter trousers number:”); trousers = scanner.nextInt(); money = getPay (coat, trousers); System.out.println( “total money = ”+money); } public static int getPay(int c, int t) { } } 要求用以下三套测试数据测试程序: 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=2 2×2=4 3×1=3 3×2=6 3×3=9 4×1=4 4×2=8 4×3=12 4×4=16 … 六、教师评分 实验预习 20% 实验过程 20% 实验结果 30% 实验报告 30% 总成绩 50 实验三 数组和字符串处理 一、实验目的 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<N<100)个整数从小到大进行连续编号,要求不能改变数组A中元素的顺序。如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.调试下列代码,写出运行结果。 public class Example { public static void change(String str,char[ ] ch) { str = “test ok”; ch[0] = ‘g’; } public static void main(String[] args) { String str = “good”; char[ ] ch = {‘a’,’b’,’c’}; change(str,ch); System.out.print(str + “ and “); System.out.println(ch); } } 运行结果是test ok and gbc吗?为什么?请分析原因: 5. 调试下列代码,写出运行结果,分析程序的功能。 class DeleteStr { public static String Del(String origin ,String smod) { if( origin !=null && smod !=null) { int index = origin.indexOf(smod); while( index!= -1) { String ret = origin.substring(0,index); ret = ret+origin.substring(index+smod.length()); origin = ret; index = origin.indexOf(smod); } return origin; } else return null; } } public class Program { public static void main(String[] args) { String str = "hellxyzo,wxyzoxyzrldxyz."; String smod = "xyz"; String newString; newString = DeleteStr.Del(str, smod); System.out.println(newString); } } 运行结果: 程序完成什么样功能? 六、教师评分 实验预习 20% 实验过程 20% 实验结果 30% 实验报告 30% 总成绩 实验四 类和对象编程(一) 一、实验目的 1. 掌握Java中类的定义、对象的创建方法; 2. 理解封装性及其意义; 3. 掌握构造函数的含义与作用、定义方式和实现,能够根据要求正确定义和重载构造函数。 4. 能够根据给定的要求定义类并实现类的成员函数; 5. 理解类的成员的访问控制的含义,公有、私有和保护成员的区别 二、实验内容 1. 定义一个学生类,其中有学号、姓名、年龄3个数据成员,以及若干成员函数。同时编写主函数使用这个类,实现对学生数据的赋值和输出。要求:使用构造函数实现对数据的输入,使用成员函数实现对数据的输出。 调试下列的参考代码。 //Student.java public class Student { private String id; private String name; private int age; public Student(String id,String name,int age) { this.id = id; this.name = name; this.age = age; } public void display() { System.out.println(“id=”+id+“\tname=”+name+“\tage=”+age); } public static void main() { Student s1 = new Student(“001”, “zhangshan”,16); s1.display(); } } 程序的Student类使用了构造方法,请回答 (1)构造方法何时被调用? (2)关键字this有何作用? (3)在实例化了s1对象后,如要将s1对象的id改为“002”,程序将如何修改。 2. 实现交通工具Vehicle类 版本一: (1)没有数据隐藏的类 创建一个Vehicle 类实现上面的UML类图。 A) 含有两个public属性: load —“车辆当前的载货量” maxLoad —“车辆的最大载货量”。 B) 含有一个公有的构造函数用于初始化最大载货量属性maxLoad。 C) 含有两个公有的函数: public double getLoad(); // 用于得到当前的载货量 public double getMaxLoad()// 用于取得最大载货量 (注意:所有的数据都是假定以千克(kilograms)作为单位的。 在这个版本的Vehicle类中,你将把所有成员的属性设置为public,这样在下面测试程序TestVehicle1中可以直接访问这些成员。 (2)编写下面的程序对Vehicle类进行测试,代码如下: public class TestVehicle1 { public static void main(String[] args) { Vehicle vehicle = new Vehicle(10000.0); System.out.println("Add box #1 (500kg)"); vehicle.load = vehicle.load + 500.0; System.out.println("Add box #2 (250kg)"); vehicle.load = vehicle.load + 250.0; System.out.println("Add box #3 (5000kg)"); vehicle.load = vehicle.load + 5000.0; System.out.println("Add box #4 (4000kg)"); vehicle.load = vehicle.load + 4000.0; System.out.println("Add box #5 (300kg)"); vehicle.load = vehicle.load + 300.0; System.out.println("Vehicle load is "+vehicle.getLoad()+" kg\n"); } } 应该得到以下的结果: Add box #1 (500kg) Add box #2 (250kg) Add box #3 (5000kg) Add box #4 (4000kg) Add box #5 (300kg) Vehicle load is 10050.0 kg 从程序的运行结果来看,你发现了什么问题?思考如何才能避免? 版本二: (1)基本数据隐藏 为了解决第一个版本中的问题,你应该隐藏类中的数据成员(load 和 maxLoad) 并且提供一个方法addBox, 来检查车辆是否会发生超载。 创建一个Vehicle 类实现上面的UML类图。 A) 把load和maxLoad属性修改为private(私有的)。 B) 添加addBox方法。 public boolean addBox(double weight); //参数为所加箱子重量 这个方法必须检查加上一个箱子后是否会超过车辆的最大载货量。如果超过了,应该拒绝装载这个箱子并返回false;否则把箱子加到车上并返回true。 注意:所有的数据都是假定以千克(kilograms)作为单位的。 (2)编写下面的程序对新版本的Vehicle类进行测试,代码如下: public class TestVehicle2 { public static void main(String[] args) { Vehicle vehicle=new Vehicle(10000.0); System.out.println("Add box #1 (500kg):"+ vehicle.addBox(500.0)); System.out.println("Add box #2 (250kg):"+ vehicle.addBox(250.0)); System.out.println("Add box #3 (5000kg):"+ vehicle.addBox(5000.0)); System.out.println("Add box #4 (4000kg):"+ vehicle.addBox(4000.0)); System.out.println("Add box #5 (300kg):"+ vehicle.addBox(300.0)); System.out.println("Vehicle load is "+vehicle.getLoad()+" kg"); } } 阅读并运行下面的测试程序段。注意代码中不能直接修改load属性的值,现在我们可以使用addBox()方法。这个方法将返回true或false并打印到屏幕上。 应该得到以下的结果: Add box #1 (500kg) : true Add box #2 (250kg) : true Add box #3 (5000kg) : true Add box #4 (4000kg) : true Add box #5 (300kg) : false Vehicle load is 9750.0 kg 版本三: (1)改变重量的内部表示单位为牛顿 现在假设你将要作一些关于车辆发动机和轮胎等磨损的计算,这些计算使用用牛顿表示的重量。 创建一个Vehicle 类实现上面的UML类图。 修改构造方法,getLoad(), getMaxLoad(), 和addBox() 方法,使它们使用一个从千克到牛顿的相互转换。你可以定义下面的私有方法: private double kiloToNewts(double weight) { ...... } private double newtsToKilo(double weight) { ...... } 注意vehicle 对象的内部数据是以牛顿为单位的,而外部数据(在方法中传递的参数)还是以千克为单位 。 (2)编写下面的程序对新版本的Vehicle3类进行测试,注意它和版本2中的测试代码是相同的,代码如下: public class TestVehicle3 { public static void main(String[] args) { Vehicle3 vehicle=new Vehicle3(10000.0); System.out.println("Add box #1 (500kg):"+ vehicle.addBox(500.0)); System.out.println("Add box #2 (250kg):"+ vehicle.addBox(250.0)); System.out.println("Add box #3 (5000kg):"+ vehicle.addBox(5000.0)); System.out.println("Add box #4 (4000kg):"+ vehicle.addBox(4000.0)); System.out.println("Add box #5 (300kg):"+ vehicle.addBox(300.0)); System.out.println("Vehicle load is "+vehicle.getLoad()+" kg"); } } 应该得到以下的结果: Creating a vehicle with a 10,000kg maximum load. Add box #1 (500kg) : true Add box #2 (250kg) : true Add box #3 (5000kg) : true Add box #4 (4000kg) : true Add box #5 (300kg) : false Vehicle load is 9750.0 kg 对Vehicle类的第二个和第三个版本采用相同的测试代码,输出的结果有没有发生变化?从代码可维护性的角度谈谈封装的好处。 3. 如果已知一个日期为2007/3/8,求10天后是哪
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 包罗万象 > 大杂烩

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2025 宁波自信网络信息技术有限公司  版权所有

客服电话:4009-655-100  投诉/维权电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服