数据结构java实验四
Java语言程序设计实验四 方法及数组实验报告
实验四 方法及数组
姓 名:
学 号:
日 期:
一、实验目的: 1、掌握数组的定义和使用方法 2、熟悉数组的排序、查找等算法
二、实验环境: 有 Java 环境的计算机若干台
三、实验内容和要求:
1、定义一个 10 个元素的数组,要求从键盘输入(Scanner 类,循环输入),并在里面查 找某个数据,找到输出“有”,没有这个数提示“无”。
思路:使用 Scanner 类输入数组元素,然后再输入要查找的元素,循环比较查找。
2、编写一个数组处理类,要求里面有这样的两个方法,第一个方法,可以对输入的数 组进行排序,第二个方法可以删除指定位置的数组元素;然后再写一个主类,测试上面 这个类的正确性。 思路:第一个类框架 class first{
System.out.println("无"); } }
2: package syyyy;
import java.util.*; class first {
public void sort(int []a) { int i,j,k,temp; for(i=0;i<a.length;i++) {
k=i; for(j=i+1;j<a.length;j++) if(a[i]>a[j]) { temp=a[k]; a[k]=a[j]; a[j]=temp; } } } public boolean delelement(int [] a,int index) { int i; if(index>a.length-1)
a[i]=chm.nextInt(); } System.out.println("请输入要找的数"); t=chm.nextInt(); for(int j=0;j<10;j++) {
数据结构 java版 4
2013年7月18日
17
Transforming Infix to Postfix
Fig. 21-9 Steps to convert the infix expression a / b * ( c + ( d – e ) ) to postfix form.
15
Infix-to-Postfix Algorithm
Symbol in Infix
Operand Operator ^ Operator +,-, *, or / Push ^ onto stack Pop operators from stack, append to output expression until stack empty or top has lower precedence than new operator. Then push new operator onto stack Push ( onto stack Pop operators from stack, append to output expression until we pop an open parenthesis. Discard both parentheses.
Stack&Queues
Stack ADT Stack Implementations Queues ADT Queues Implementations
2013年7月18日
Chapter Contents
Specifications of the ADT Stack Using a Stack to Process Algebraic Expressions
java实验报告4
实验4 Java 语言面向对象基础编程一.实验目的(1)通过编程和上机实验理解Java语言是如何体现面向对象编程基本思想(2)如何创建类和对象二、实验要求1、编写一个体现面向对象思想的程序;2、编写一个创建对象和使用对象的方法的程序;3、编写体现构造方法重载的程序;三.实验内容1、定义类创建类对象设计类来描述真实客观世界中的事物,使用类的成员变量来表示事物的属性和状态,使用类的成员方法来提供对成员变量的访问或修改(1)程序功能:设计一个用来描述汽车的类,使用类的非静态成员变量来表示汽车的车主姓名、当前的速率和当前方向盘的转向角度,使用类的非静态成员方法来表示改变汽车的速率和停车两个操作。
源代码:(自己编写)创建类的对象,使用对象的方法(类的非静态方法)来访问或修改对象的变量(类的非静态变量)(1)创建上面第一步的类的对象,在调用类的构造函数时指定对象的变量的初始值,以后再使用对象的方法来访问或修改对象的变量的值。
源代码:2、构造方法重载构造方法的名称和类同名,没有返回类型。
尽管构造方法看起来和一般的成员方法没有差别,但它不是方法,也不是类的成员。
因此,构造方法不能直接调用,只能由new 操作符调用。
构造方法对于类是十分重要的,对象的初始化任务要靠构造方法来完成。
重载构造方法的目的是提供多种初始化对象的能力,使程序员可以根据实际需要选用合适的构造方法来初始化对象。
源代码如下:class RunDemo {private String userName, password;在该处编写不带参数的构造方法在该处编写带一个参数的构造方法在该处编写带两个参数的构造方法}public class EXP2 {public static void main(String[] args) {//使用不同的构造方法进行对象的初始化}}3、调用方法时参数传递的练习在Java 中,方法中的参数传递可以分为传值调用或对象方法调用等方式。
数据结构(java)实验4.1
实验四数组、集合和矩阵及其应用一、实验目的1.熟悉数组、集合和矩阵的基本概念、存储表示和实现。
2.熟练掌握数组、集合和矩阵的有关操作和应用。
二、实验内容1.对于MyVector类●设计和编写删除全部数据元素的成员函数removeAll()。
●设计一个测试程序,测试上述新增的成员函数。
2.设计一个集合(Set)抽象数据类型接口(SimpleSet)和其实现类(MySet)●要求接口SimpleSet包含集合常见的操作(参见教材19页),包括集合的并、交、差、相等、真子集等基本操作以及集合元素的输出等操作。
●设计和编写实现类MySet中的两个集合的并、两个集合的交和两个集合的差等成员函数。
●设计和编写实现类MySet中的比较两个集合相等否的成员函数equals1(MySet),调用集合的包含成员函数include(MySet)来实现。
●设计和编写实现类MySet中的比较集合相等与否的成员函数equals2(MySet),要求通过调用属于成员函数contains(obj)来实现。
●设计和编写实现类MySet中的真子集成员函数。
集合A是集合B的真子集,是指集合A是集合B的子集,同时集合B中至少有一个数据元素在集合A中没有。
●为了能够使集合中数据元素的数据类型可以为任意的类类型,练习使用泛型来定义接口和类。
●设计一个测试程序,测试上述接口、实现类和新增的成员函数。
3.对于Matrix类●设计和编写Matrix类的添加一行成员函数,要求在矩阵的最后一行后边添加一行。
●设计和编写Matrix类的添加一行成员函数,要求在矩阵指定行下标index前添加一行。
●设计和编写Matrix类的添加一列成员函数,要求在矩阵的最后一列后边添加一列。
●设计和编写Matrix类的添加一列成员函数,要求在矩阵指定列下标index前添加一列。
●设计和编写Matrix类的删除一行成员函数,要求在矩阵指定的index一行。
●设计和编写Matrix类的删除一列成员函数,要求在矩阵指定的index一列。
Java数据结构实验报告
Java数据结构实验报告Java数据结构实验报告引言:数据结构是计算机科学中非常重要的一个领域,它研究如何组织和存储数据,以便能够高效地访问和操作。
在本次实验中,我们将使用Java语言实现几种常见的数据结构,并进行性能测试和分析,以便更好地理解它们的特点和应用场景。
一、数组:数组是最简单的数据结构之一,它由相同类型的元素组成,并按照一定的顺序存储在连续的内存空间中。
在Java中,数组的长度是固定的,一旦创建后就无法改变。
我们可以通过索引来访问数组中的元素,这使得数组的访问速度非常快。
在本次实验中,我们通过比较不同大小的数组在插入、删除和查找操作上的性能表现,来分析数组的优缺点。
实验结果显示,数组在查找操作上的性能非常好,时间复杂度为O(1),但在插入和删除操作上的性能较差,时间复杂度为O(n)。
因此,数组适用于那些需要频繁访问元素,但很少进行插入和删除操作的场景。
二、链表:链表是另一种常见的数据结构,它由节点组成,每个节点包含数据和指向下一个节点的指针。
与数组不同,链表的长度可以动态改变,这使得它更加灵活。
在Java中,链表有多种实现方式,如单链表、双向链表和循环链表等。
在本次实验中,我们比较了不同类型链表在插入、删除和查找操作上的性能表现。
实验结果显示,单链表在插入和删除操作上的性能非常好,时间复杂度为O(1),但在查找操作上的性能较差,时间复杂度为O(n)。
相比之下,双向链表在插入、删除和查找操作上都具有较好的性能,时间复杂度均为O(1)。
因此,链表适用于那些需要频繁进行插入和删除操作的场景。
三、栈和队列:栈和队列是两种特殊的数据结构,它们都是在一端进行插入和删除操作的。
栈遵循先进后出(LIFO)的原则,而队列遵循先进先出(FIFO)的原则。
在Java 中,栈和队列可以使用数组或链表来实现。
在本次实验中,我们通过比较数组栈、链表栈、数组队列和链表队列在插入、删除和查找操作上的性能表现,来分析它们的特点和适用场景。
合工大java实验报告-04
答:错误的类型转换、数组越界访问和试图访问空指针。我在程序中遇到了最后一种。
五、实验结论、分析、思考题与心得体会
本次试验,花费了我一天的时间,虽然不能说全是自己做的,但是自己还是误就是在一个字符串的符号上。我将str1写成了str,这两个不是代表同一个字符串,结果在客户端始终输不出服务器端的字符串,这让我弄了好久好久。
3.服务器端在本地建立一个文本文件存储与客户端互传字符串的记录。
4.若服务器端可以同时连接多个不同的客户端该怎么设计?
答:设计为多线程,运用thread类,run函数。
三、使用硬件、软件环境
PC计算机一台,配置为CPU为1.5G,内存为512M,硬盘为40G,安装WindowsXP操作系统。
另外,使用JCreator,JDK1.6.0等软件
2.掌握Socket类、ServerSocket类、InputStreamReader类、File类和BufferedReader等系统类的使用方法。
3.掌握线程处理的方法。
二.实验内容
1.在服务器端通过指定一个用来等待的连接的端口号创建一个ServerSocket实例。
2.在客户端通过规定一个主机和端口号创建一个Socket实例,连到服务器上。
(提示:搜寻“计算机网络协议”方面的材料)
答:都有,只是TCP/IP比较主流,TCP是Internet的基础和核心,一种面向连接的保证可靠传输的协议,得到的是一个顺序无差错的数据流优点是在通信前要建立连接,所以安全、可靠。缺点是要等待对方回应,速度较慢。而UDP/IP是从一台计算机向另一台计算机发送称为数据报的独立数据包的协议,该协议并不保证数据报是否能正确地到达目的地。它是一个非面向连接的协议。UDP不需要建立连接,所以速度较快。不能保证传送的数据包按顺序到达,因此安全性较差。QQ等IM软件,一般均采用UDP协议。
java第四次实验报告
this.year = year;
this.day = day;
}
public void ChangeToDate(Date1 date) {
String Month[] =
{
"January","Februry","March", "April", "May","June",
{"drove","jumped","ran","walked","skiped"},
{"to","from","over","'under","on"},
{"the","a","one","some","any"},
{"boy","girl","dog","town","car"} };
TextArea output;
Button m;
int b,c;
public void init() {
output=new TextArea(25,50);
m=new Button("开始");
add(output);
add(m);
}
public boolean action(Event e,Object o){
output.setText ("");
Java数据结构实验报告
Java数据结构实验报告《Java数据结构实验报告》摘要:本实验报告旨在介绍Java数据结构的相关知识,并通过实验验证其在实际应用中的效果。
通过对Java数据结构的学习和实验,我们可以更好地理解和掌握数据结构在软件开发中的重要性和应用方法。
1. 引言数据结构是计算机科学中的重要概念,它是指一组数据的组织方式和存储结构,是程序设计中最基本的概念之一。
Java作为一种广泛应用的编程语言,具有强大的数据结构支持,包括数组、链表、栈、队列、树等。
本实验报告将重点介绍Java数据结构的使用和实验结果。
2. 实验目的本实验旨在通过实际操作,掌握Java数据结构的基本概念、使用方法和实际应用。
具体包括以下几个方面:- 了解Java数据结构的基本概念和分类;- 掌握Java数据结构的常见操作和实现方法;- 通过实验验证Java数据结构在实际应用中的效果。
3. 实验内容本实验主要包括以下几个方面的内容:- 数组:学习数组的定义、初始化、访问和操作方法,并通过实验验证其效果;- 链表:学习链表的定义、插入、删除和遍历方法,并通过实验验证其效果;- 栈和队列:学习栈和队列的定义、操作方法,并通过实验验证其效果;- 树:学习树的定义、遍历和搜索方法,并通过实验验证其效果。
4. 实验结果通过实验,我们成功地掌握了Java数据结构的基本概念和操作方法,并验证了其在实际应用中的效果。
具体包括以下几个方面的结果:- 数组:我们成功地实现了数组的初始化、访问和操作,并验证了其在存储和检索数据方面的效果;- 链表:我们成功地实现了链表的插入、删除和遍历,并验证了其在数据组织和操作方面的效果;- 栈和队列:我们成功地实现了栈和队列的操作,并验证了其在数据存储和处理方面的效果;- 树:我们成功地实现了树的遍历和搜索,并验证了其在数据组织和检索方面的效果。
5. 结论通过本实验,我们对Java数据结构有了更深入的理解和掌握,了解了其在实际应用中的重要性和作用。
20140925 数据结构(JAVA版)实验报告
public Object delete(int i) throws Exception{ if(size == 0){ throw new Exception("链表已空无元素可删!"); } if(i < 0 || i > size - 1){ throw new Exception("参数错误!"); }
实验数据记录及分析(或程序及运行结果)
第 14 页 共 18 页
实验报告
评语:
第 15 页 共 18 页
实验报告
实验六:图
实验目的:
1. 掌握图的存储结构; 2. 掌握图的相关操作,从而解决实际问题。
实验内容
一、 实验内容 1、构建一个 Java Application。 2、定义一个名为 Stu 包,在这个包中定义一个实现显示学生的学号、姓名、 性别和班级的 Student 类;然后定义另一个引用 Stu 包的类,在这个类中 用 Stu 包中的 Student 类生成一个对象。 3、定义接口,继承接口,实现接口的实验。 二、 实训步骤 第一:新建一个名为 Exp1 的工程。 第二:包的创建与使用。 算法分析: 先在两个 java 源文件中分别定义了两个包,并且在第 1 个包中定义了一个 MyClass1 类,在第 2 个包中定义了一个 MyClass2 类。 在第三个 java 源文件的主类 TestPackage 中分别引用前面定义的两个包,并 分别将 MyClass1 类和 MyClass2 类实例化。 1、在该工程中新建一个 java 源文件,并输入如下代码: package Mypackage; //定义包 Mypackage public class MyClass1 { //定义类 MyClass1 public void show() { System.out.println("这是类 MyClass1"); } } 2、在该工程中再新建一个 java 源文件,并输入如下代码: package Mypackage.Mypackage1; //定义包 Mypackage.Mypackage1 public class MyClass2 { //定义类 MyClass2 public void show(){ System.out.println("这是类 MyClass2"); } }
java实验4
实验4 数组(4学时)一、实验目的1.熟练掌握Java中一维数组、多维数组的使用方法。
2.使用Java数组解决一般性的应用问题。
二、实验内容1、在main方法中创建一个含有10个元素的int型数组,进行以下操作:(1)将数组元素按照从小到大的顺序排列;(2)对排好序的数组使用折半查找(使用递归和非递归两种形式分别实现)查找某一个int元素。
2、使用一维数组编码实现一个栈(Stack)类,要求提供以下操作:(1)boolean isEmpty():判断栈当前是否为空;(2)入栈操作void push(obj):把数据元素obj插入堆栈;(3)出栈操作Object pop():出栈,并返回删除的数据元素;(4)Object getTop():取堆栈当前栈顶的数据元素并返回。
编写代码测试所形成的Stack类,然后利用Stack类实现以下功能:输入一个正整数,输出该整数所对应的二进制数。
3、按照要求使用Java编码。
1)以类型int[][]声明一个叫matrix的二维数组变量,将矩阵初始化为一个5个元素的数组。
2)以下列方式为matrix的内部元素赋值:matrix从零开始循环到其长度值;例如索引为i,在每次迭代中,将matrix[i]指向一个新的整数数组,其长度为i。
然后用索引变量j,对数组中的每一个元素进行循环。
在每次内部循环中,将matrix[i][j]赋值为(i*j)。
3)通过循环打印matrix中的所有元素,结果为:<><0><0 2><0 3 6><0 4 8 12>4、利用二维数组实现一个矩阵类:Matrix。
要求提供以下操作:(1)set(int row, int col, doublevalue):将第row行第col列的元素赋值为value;(2)get(int row,int col):取第row 行第col列的元素;(3)width():返回矩阵的列数;(4)height():返回矩阵的行数;(5)Matrix add(Matrix b):返回当前矩阵与矩阵b相加后的结果矩阵;(6)Matrix multiply (Matrix b):返回当前矩阵与矩阵b相乘后的结果矩阵。
山东科技大学-Java数据结构实验四
实验报告
课程名称:
学院:
专业:班级:
姓名:学号:
年月日
山东科技大学教务处制
实验报告
页
测试数据如上图所示:
2、彩票
(1)文字分析和代码详情
利用hash表来实现代码,详细解释在注释中import java.util.HashSet;
import java.util.Scanner;
import java.util.Set;
public class Testb {
/*构造一个方法getLuck*/
public static HashSet<Integer> getLuck() {
(2)测试的结果和显示
测试结果如上图所示:
3、保皇
(1)文字分析和代码详情
程序启动后生成5个玩家,并自动给他们发牌。
然后输出:1)皇帝和侍卫的名字及其手里的牌(每张牌输出为“花色”+“点数”,如红桃5,牌之间用“,”分割),并按照大王、小王、2、A、K、Q、J、10、9、8、7、6、5、4、3的顺序排列,相同点数但不同花色的牌要把相同花色的牌放在一起;2)那张作为侍卫所特有的牌(“花色”+“点数”)。
测试结果如上图所示:。
java_实验四
武汉工程大学计算机科学与工程学院实验报告[4]一、实验目的1)了解Java.awt包及Swing的新增特性。
2)了解Java系统图形用户界面的基本工作原理和界面设计的步骤。
3)了解图形用户界面的事件响应机制。
4)了解图形用户界面各种常用的基本组件的使用方法及其事件响应。
5)掌握Java常用组件的应用6)掌握图形用户界面各种布局策略的设计与使用二、实验要求1)创建一个简单的图形用户界面。
2)使用Java类库中提供的组件,并添加到图形用户界面中。
3)通过Java事件处理机制,实现与用户的交互信息。
4)练习使用布局管理器5)使用Java类库中提供的组件,并添加到图形用户界面中6)通过Java事件处理机制,实现与用户的交互信息三、实验内容对一个优秀的应用程序来说,良好的图形用户界面是必不可少的。
因为只有通过图形界面,用户才能够与程序友好的交互。
缺少良好的图形用户界面,将会给用户理解和应用程序带来很多不便。
创建一个完整的图形用户界面的应用程序大致流程如下:1)引用需要的包和类。
2)设置一个顶层的容器。
3)根据需要为容器设置布局管理器或使用默认布局管理器。
4)将组件添加到容器内,位置自行设计。
5)为响应事件的组件编写事件处理代码。
下面我们先建立一个简单的图形用户界面,然后通过合适的布局管理器,将各种常用组件添加到图形用户界面中,实现与用户的交互信息。
1. 创建简单的图形用户界面(1)创建简单的 Frame 框架在 AWT 库中,对应于框架的类是 Frame,在 Swing 库中,相应的类是 JFrame。
JFrame 类扩展了 Frame 类。
大部分 ATWT 组件在 Swing 中都有等价的组件,它们在表示形式上差一个“J”。
框架是一个容器,可以在这个容器中放入其他一些图形用户界面组件,如按钮、菜单等,从而组成一个功能完善的程序。
下面的例子是建立一个 Frame 框架,通过这个例子学习如何创建一个简单的图形用户界面。
Java实验四-实验报告
Java实验四-实验报告实验四类和对象;类的继承和派生;多态性;接口;构造器应用一、实验目的1、掌握类与对象的关系;2、掌握类的定义;3、掌握对象的声明及使用;4、掌握构造方法的概念及调用时机;5、掌握构造方法的重载;6、掌握匿名对象的使用。
二、实验学时2学时三、实验类型验证性实验四、实验需求1、硬件每位学生配备计算机一台2、软件Windows 7操作系统,JDK,eclipse,MySQL 3、网络无4、工具无五、实验理论与预备知识1、类与对象的关系;2、类的定义;3、对象的声明及使用;4、构造方法的概念及调用时机;5、构造方法的重载;6、匿名对象的使用。
六、实验内容与结果1、编写一个应用程序,该程序中有3个类:Trangle、Leder和Circle,分别用来刻画“三角形”、“梯形”和“圆形”。
//三角形类class Trangle {double sidea,sideb,sidec,sjxzc,sjxmj;boolean boo;public Trangle(double a,double b,double c){sidea=a;sideb=b;sidec=c;if(a+b>c && a+c>b && b+c>a){boo=true;}else{boo=false;}}double getlength(){double length;length=sidea+sideb+sidec;return length;}public double getarea(){if(boo){double area;double p=(sidea+sideb+sidec)/2.0;area=Math.sqrt(p*(p-sidea)*(p-sideb)*(p-sidec)); return area;}else{System.out.println("不是一个三角形,不能计算面积"); return 0;}}}//梯形类class Laderdouble txsd,txxd,txhigh,txarea;Lader(double a,double b,double c){txsd=a;txxd=b;txhigh=c;}double getarea(){double area;area=(txsd+txxd)*txhigh/2.0; return area;}}//圆形类class Circle{double ybj,yzc,yarea;Circle(double r){ybj=r;}double getarea(){double area;area=3.14*ybj*ybj;return area;}double getlength(){double length;length=2*3.14*ybj;return length;}void setybj(double newybj) {ybj=newybj;}double getybj(){return ybj;}}public class one {public static void main (String args[]){double length,area;Circle circle=new Circle(5);Trangle trangle=new Trangle(3,4,5); Lader lader=new Lader(3,4,6);length=circle.getlength();System.out.println("圆的周长:"+length); area=circle.getarea();System.out.println("圆的面积:"+area); length=trangle.getlength();System.out.println("三角形的周长:"+length); area=trangle.getarea();System.out.println("三角形的面积:"+area); area=lader.getarea();System.out.println("梯形的面积:"+area); trangle=new Trangle(1,1,3);area=trangle.getarea();System.out.println("三角形的面积:"+area); length=trangle.getlength();System.out.println("三角形的周长:"+length); }}2、编写一个公司员工类。
Java实验报告4
(3)如果将B.java去掉import语句,并在使用包中的类时带上完整的路径,运行时结果正确。
(4)把A.java程序的相关部分作如下修改进行测试,编译运行。
System.out.println("从类A中访问Clock hour="+c.hour);
System.out.println("从类A中访问Clock minute="+c.minute);
System.out.println("从类A中访问Clock second="+c.second);
·ClassNotFoundException:具有指定名字的类或接口没有被发现。
·CloneNotSupportedException:克隆一个没有实现Cloneable接口的类。
·IllegalAccessException:试图用给出了完整的路径信息的字符串加载一个类,但是当前正在执行的方法无法访问指定类,因为该类不是public类型或在另一个包中。
int n,a;String x;
BufferedReader keyin=
new BufferedReader(new InputStreamReader(System.in));
System.out.print("Enter an integer");
x=keyin.readLine();
n=Integer.parseInt(x);
实验四_JAVA
集美大学诚毅学院实验报告课程名称:java 班级:1371实验成绩:指导教师:姓名:方XX实验项目名称:学号:上机实践日期:201342051022实验项目编号:实验四上机实践时间:一、实验步骤和调试过程1、数字存取:通过随机数函数产生50个正整数,逐个将这些数写入文件file.dat中;然后读出这些数,在内存中对它们进行排序,再将排序后的数据逐个写入file.out文件中。
package fds;import java.io.*;import java.util.*;public class text {public static void main(String[] args) throws IOException {File a=new File("f:/111.txt");File b=new File("f:/222.txt");a.createNewFile();b.createNewFile();BufferedReader in=null;BufferedWriter out1=null,out2=null;Random rand=new Random(10);int[] arr=new int[50];try{out1=new BufferedWriter(new FileWriter(a));out2=new BufferedWriter(new FileWriter(b));for(int i=0;i<arr.length;i++){out1.write(String.valueOf(rand.nextInt(20)));out1.write(" ");if(i%10==9)out1.newLine();}out1.close();Scanner sc = new Scanner(a);for(int i=0;sc.hasNextInt();i++){arr[i]=sc.nextInt();}Arrays.sort(arr);for(int i=0;i<arr.length;i++){out2.write(String.valueOf(arr[i]));out2.write(" ");if(i%10==9)out2.newLine();}}finally{if(in!=null){in.close();}if(out2!=null){out2.close();}}}}2、文件内容加行号:给定一个文件,通过文件读写,给文件内容加行号。
JAVA程序设计基础实验四
实验报告四课程JA V A程序设计实验项目异常与线程成绩学号XXXXXX姓名XXXX实验日期2012.10.17专业班级计算机科学与技术09级指导教师XXXXX一【实验目的】(1)理解异常和异常处理的概念(2)理解异常处理机制二【实验内容】【项目一】理解异常处理机制1.编写以下程序,并编译运行3.使用try{}catch{}final{}结构,捕获并处理异常,在final里中打印输出:public class Ex7_1{public static void main(String[] args){try{String output[]={"The","quick","brown","fox","jumps","over","the","lazy","dog."};int i=0;while(i<12){System.out.print(output[i++]);}}catch(Exception e){System.out.print("haha...");}finally{System.out.println("不管怎样都要执行的语句!");}}}【项目二】完成实验指导书——5.2.4 异常处理(1)程序代码class NoLowerLetter extends Exception{public void print(){System.out.printf("%c",'#');}}class NoDigit extends Exception{public void print(){System.out.printf("%c",'*');}}class People{void printLetter(char c) throws NoLowerLetter{if(c<'a'||c>'z'){NoLowerLetter noLowerLetter=new NoLowerLetter(); throw noLowerLetter;}else{System.out.print(c);}}void printDigit(char c) throws NoDigit{if(c<'1'||c>'9'){NoDigit noDigit=new NoDigit();throw noDigit;}else{System.out.print(c);}}}public class ExceptionExample{public static void main (String args[]){People people=new People();for(int i=0;i<128;i++){try{people.printLetter((char)i);}catch(NoLowerLetter e){e.print();}}for(int i=0;i<128;i++){try{people.printDigit((char)i);}catch(NoDigit e){e.print();}}}}(2)运行结果【项目三】使用Thread创建线程,要求及部分源码见附件/线程/1~6.jpgclass Tortoise extends Thread{int sleepTime=0,liveLength=0;Tortoise(int sleepTime,String name,int liveLength){this.sleepTime=sleepTime;this.liveLength=liveLength;setName("乌龟");}public void run(){while(true){liveLength--;System.out.printf("@");try{Thread.sleep(80);}catch(InterruptedException e){}if(liveLength<=0){System.out.printf(getName()+"进入死亡状态\n");return;//结束run()方法的语句;}}}}class Rabbit extends Thread{int sleepTime=0,liveLength;Rabbit(int sleepTime,String name,int liveLength){this.sleepTime=sleepTime;this.liveLength=liveLength;setName("兔子");}public void run(){while(true){liveLength--;System.out.printf("*");try{Thread.sleep(50);}//让线程调用sleep()方法进入中断状态,sleepTime 毫秒后线程重新排队,等待CUP资源;catch(InterruptedException e){}if(liveLength<=0){System.out.printf(getName()+"进入死亡状态\n");return;//结束run()方法的语句;}}}}public class ThreadExample{public static void main(String args[]){String s1="兔子",s2="乌龟";Rabbit rabit;rabit=new Rabbit(50,s1,50);//新建线程rabit;Tortoise tortoise;tortoise=new T ortoise(20,s2,70);//新建线程tortoise;rabit.start();//启动线程tortoisetortoise.start();//启动线程rabit;}}【项目四】使用Rannable接口创建线程class Bank implements Runnable{private int money=100;Thread zhang,keven;Bank(){String s1="会计",s2="出纳";zhang=new Thread(this);zhang.setName(s1);keven=new Thread(this);keven.setName(s2);}public void run(){int i=0;//声明一个int类型变量i,初值为0;while(true){if(Thread.currentThread().getName().equals("会计")){ i=i+1;money=money+1;System.out.printf("%s将money的值改为%d\t",zhang.getName(),money);System.out.printf("%s的局部变量i=%d\n",zhang.getName(),i);if(i>=6){System.out.printf("%s线程进入死亡状态\n",zhang.getName());return;}try{Thread.sleep(1000);}catch(InterruptedException e){}}else if(Thread.currentThread().getName().equals("出纳")){i=i-1;money=money-1;System.out.printf("\n%s将money的值改为%d\t",keven.getName(),money);System.out.printf("%s的局部变量i=%d\n",keven.getName(),i);if(i<=-6){System.out.printf("%s线程进入死亡状态\n",keven.getName());return;}try{Thread.sleep(1000);}catch(InterruptedException e){}}}}}public class BankExample{public static void main(String args[]){Bank bank=new Bank();bank.zhang.start();bank.keven.start();}}三【实验小结】本次实验是这么课程的第四次实验,通过前几次的实验让我对Java的学习有了更深一步的了解,这次实验主要练习的是线程和异常,仍然主要是利用了类的创建,在做实验的过程中,第一步编译的时候还是会出现许多错误,根据错误的地方提示再一步一步的进行修改。
java实验四实验报告
}
编译:javac TwoThread.java
解释执行:java TwoThread
运行后结果:
1、用创建Thread类的子类的方法实现多线程:
源程序:
class FruitThread extends Thread
{
public FruitThread (String str)
{
super(str);
}
public void run()
{
for(int i=0;i<5;i++)
{
System.out.println(i+""+getName());
T2.start();
}
}
编译:javac C.java
解释执行:java RunThread
运行后结果:
c源程序:
class run1Thread implements Runnable
{
public void run()
{
System.out.println("This is Runnable");
outputClass(String s){
name=s;
}
public void run(){
for(int i=0;i<3;i++){
System.out.println(name);
Thread.yield();
}
}
}
class runThreads{
public static void main(String args[]){
try
{
sleep((int)(Math.random()*1000));
天津理工大学Java实验四实验报告
天津理⼯⼤学Java实验四实验报告天津理⼯⼤学计算机科学与⼯程学院实验报告2017 ⾄2018 学年第⼀学期附录(源程序清单)// FullQueueException类package Ex;public class FullQueueException extends IndexOutOfBoundsException { private static final long serialVersionUID = 1L;String ERROR_INFO;FullQueueException(String s){this.ERROR_INFO = new String(s);}public String toString(){return "FullQueueException" + ERROR_INFO;}}// EmptyQueueException类String ERROR_INFO; EmptyQueueException(String s){this.ERROR_INFO = new String(s);}public String toString(){return "EmptyQueueException" + ERROR_INFO; }}// CircleQueue类import java.util.Arrays;public class CircleQueue{private int DEFAULT_SIZE = 5;private int capacity;private Object[] elementData;private int front = 0;private int rear = 0;public CircleQueue(){capacity = DEFAULT_SIZE;elementData = new Object[capacity];}public CircleQueue(T element){this();elementData[0] = element;rear++;}public CircleQueue(T element, int initSize){this.capacity = initSize;elementData = new Object[capacity];rear++;}public int size(){if (isEmpty()){return 0;}return rear > front ? rear - front : capacity - (front - rear);}public void addBack(T element) throws FullQueueException { if (rear == front && elementData[front] != null){throw new FullQueueException("队列已满的异常");}elementData[rear++] = element;rear = rear == capacity ? 0 : rear;}public T removeFront() throws EmptyQueueException{if (isEmpty()){throw new EmptyQueueException("空队列异常");T oldValue = (T) elementData[front];elementData[front++] = null;front = front == capacity ? 0 : front;return oldValue;}public T element() throws EmptyQueueException{if (isEmpty()) {throw new EmptyQueueException("空队列异常");}public boolean isEmpty(){// rear==front且rear处的元素为nullreturn rear == front && elementData[rear] == null; }public void clear(){Arrays.fill(elementData, null);front = 0;rear = 0;}}// PrintJob类public class PrintJob{private String jobName;private int pages;public PrintJob(String sjN, int spg){this.jobName = new String(sjN);this.pages = spg;}public String getName(){return this.jobName;}public int getPages(){return this.pages;}}import java.util.Queue;private int sizeOfJobs;private int numberOfJobs;private int delayBetweenJobs;private String producerName;private Thread PrintThread = null;public Producer(int ss, int sn, int sd, String spn, Thread t) {this.sizeOfJobs = ss;this.numberOfJobs = sn;this.delayBetweenJobs = sd;this.producerName = new String(spn);this.PrintThread = t;}public void run() {for (int i = 0; i < this.numberOfJobs; i++) {PrintJob pj = new PrintJob(this.producerName + " #" + i, this.sizeOfJobs); try {Printer.getInstance().addJob(pj);Thread.sleep(this.delayBetweenJobs);} catch (InterruptedException e) {e.printStackTrace();} catch (FullQueueException e) {System.out.println("⽆法添加打印任务启动Printer" + e);}}}}//Printer类public class Printer implements Runnable{static private CircleQueue printQueue = new CircleQueue();static private boolean stateIsRunning = true;private static final Printer PRNTR_ONL Y = new Printer();static private boolean whileend = false;public static Printer getInstance() {return PRNTR_ONL Y;}public synchronized void halt(){if (Printer.stateIsRunning) {System.out.println("C: Print manager is halted.");Printer.stateIsRunning = false;}}public void addJob(PrintJob job) throws FullQueueException, InterruptedException { synchronized (printQueue){try{this.printQueue.addBack(job);}catch (FullQueueException e){try{printQueue.notify();printQueue.wait();}catch (InterruptedException e1){e1.printStackTrace();}}}System.out.println("[1]P: Adding job " + job.getName() + " to the queue");}private PrintJob getJob() throws EmptyQueueException {PrintJob p = null;while (p == null && stateIsRunning) {try {p = this.printQueue.element();Printer.printQueue.removeFront();} catch (EmptyQueueException e) {try {printQueue.notifyAll();printQueue.wait(500);} catch (InterruptedException e1) {e1.printStackTrace();}System.out.println("C: Waiting on a job to print." + stateIsRunning);}}return p;}}public void run() {System.out.println("C: Print manager is starting up.");while (stateIsRunning) {PrintJob pjob = null;try {pjob = this.getJob();System.out.println("[2]C:Starting job " + pjob.getName()); Thread.sleep(500 * pjob.getPages());System.out.println("[3]C:Completed job " + pjob.getName());} catch (EmptyQueueException e) {break;} catch (InterruptedException e) {e.printStackTrace();}}}//TestPrinter类public class TestPrinter{public static void main(String[] args) {Printer PRNT_P = Printer.getInstance();Thread THRD_P = new Thread(PRNT_P);THRD_P.setPriority(10);Producer pd1 = new Producer(5, 2, 5, "A", THRD_P); Producer pd2 = new Producer(5, 2, 5, "B", THRD_P); Producer pd3 = new Producer(5, 3, 5, "C", THRD_P); Thread thrd_A = new Thread(pd1);Thread thrd_B = new Thread(pd2);Thread thrd_C = new Thread(pd3);thrd_A.start();thrd_B.start();thrd_C.start();THRD_P.start();try {thrd_A.join();thrd_B.join();thrd_C.join();计算机科学与⼯程系}catch (InterruptedException e1){e1.printStackTrace();}try{Thread.sleep(10000);}catch (InterruptedException e){e.printStackTrace();PRNT_P.halt(); }}。
数据结构java实验四
《数据结构(JA V A)》综合性、设计性实验成绩单开设时间:2012学年第一学期《数据结构(JA V A)》实验报告实验题目:树和二叉树的基本操作指导教师:实验组长(姓名+学号):组员(姓名+学号):实验时间:组长签名:一、实验报告撰写提纲1、实验目的1.理解二叉树的定义、性质、存储结构等基本概念,掌握二叉树类的设计方法,以及遍历、插入、删除等二叉树操作的算法实现;掌握采用链式存储结构表达非线性结构的设计方法;掌握采用递归算法实现递归数据结构基本操作的设计方法。
2.熟悉树的定义、表示、存储结构和遍历,具备使用树各种操作的能力。
2、实验内容(1)在一棵二叉链表表示的二叉树中,实现以下操作,并说明采用哪种遍历算法,其他遍历算法是否可行。
①输入叶子结点。
②求二叉树中叶子结点个数。
③将每个结点的左子树与右子树交换。
④验证二叉树的性质3:n0=n2+1。
⑤输出值大于k的结点。
⑥已知先根和中根次序遍历序列构造二叉树。
⑦以广义表表示构造二叉树。
⑧判断两颗二叉树是否相等。
⑨求结点所在的层次。
⑩求一颗二叉树在后根次序遍历下第一个访问的结点。
⑪复制一颗二叉树。
⑫判断一颗二叉树是否为完全二叉树。
⑬实现二叉树后根次序遍历的非递归算法。
(2)声明三叉链表表示的二叉树类,实现二叉树的基本操作以及以下操作。
①构造一颗三叉链表表示的二叉树。
②返回指定结点的父母结点。
③返回指定结点的所有祖先结点。
④返回两结点最近的共同祖先结点。
(3)在一颗中序线索二叉树中,实现以下操作。
①调用求结点的前驱结点算法,按中根次序遍历一颗中序线索二叉树。
②按后根次序遍历中序线索二叉树。
③在构造二叉树时进行线索化。
④插入、删除操作。
3、实验步骤与结果(1)①审题:在一棵二叉链表表示的二叉树中,实现以下操作,并说明采用哪种遍历算法,其他遍历算法是否可行。
①输入叶子结点。
②求二叉树中叶子结点个数。
③将每个结点的左子树与右子树交换。
④验证二叉树的性质3:n0=n2+1。
武汉科技大学 Java实验报告 实验四
NoSuchFieldException
Signals that the class doesn't have a field of a specified name.
提示:在类中没有一个方法指定为该名称。
一个非凡的算术条件时抛出发生。例如,一个整数”除以零”抛出一个这个类的实例。
ArrayStoreException
An assignment to an array component of reference type throws an ArrayStoreException when the value to be assigned is not compatible with the component type of the array.
Thrown when a particular method cannot be found.
抛出它,当该方法不能被找到的时候。
Thrown to indicate that the application has attempted to convert a string to one of the numeric types, but that the string does not have the appropriate format.
信息科学与工程学院《Java程序设计》上机实验报告
专业班级姓名学号
实验时间指导教师成绩
实验名称
实验四异常类的定义及处理
实验目的
1)了解异常处理方法。
2)熟悉并掌握常见异常的捕获方法。
3)熟悉JDK中已经定义的若干异常类的层次结构。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
《数据结构(JA V A)》综合性、设计性实验成绩单开设时间:2012学年第一学期《数据结构(JA V A)》实验报告实验题目:树和二叉树的基本操作指导教师:实验组长(姓名+学号):组员(姓名+学号):实验时间:组长签名:一、实验报告撰写提纲1、实验目的1.理解二叉树的定义、性质、存储结构等基本概念,掌握二叉树类的设计方法,以及遍历、插入、删除等二叉树操作的算法实现;掌握采用链式存储结构表达非线性结构的设计方法;掌握采用递归算法实现递归数据结构基本操作的设计方法。
2.熟悉树的定义、表示、存储结构和遍历,具备使用树各种操作的能力。
2、实验内容(1)在一棵二叉链表表示的二叉树中,实现以下操作,并说明采用哪种遍历算法,其他遍历算法是否可行。
①输入叶子结点。
②求二叉树中叶子结点个数。
③将每个结点的左子树与右子树交换。
④验证二叉树的性质3:n0=n2+1。
⑤输出值大于k的结点。
⑥已知先根和中根次序遍历序列构造二叉树。
⑦以广义表表示构造二叉树。
⑧判断两颗二叉树是否相等。
⑨求结点所在的层次。
⑩求一颗二叉树在后根次序遍历下第一个访问的结点。
⑪复制一颗二叉树。
⑫判断一颗二叉树是否为完全二叉树。
⑬实现二叉树后根次序遍历的非递归算法。
(2)声明三叉链表表示的二叉树类,实现二叉树的基本操作以及以下操作。
①构造一颗三叉链表表示的二叉树。
②返回指定结点的父母结点。
③返回指定结点的所有祖先结点。
④返回两结点最近的共同祖先结点。
(3)在一颗中序线索二叉树中,实现以下操作。
①调用求结点的前驱结点算法,按中根次序遍历一颗中序线索二叉树。
②按后根次序遍历中序线索二叉树。
③在构造二叉树时进行线索化。
④插入、删除操作。
3、实验步骤与结果(1)①审题:在一棵二叉链表表示的二叉树中,实现以下操作,并说明采用哪种遍历算法,其他遍历算法是否可行。
①输入叶子结点。
②求二叉树中叶子结点个数。
③将每个结点的左子树与右子树交换。
④验证二叉树的性质3:n0=n2+1。
⑤输出值大于k的结点。
⑥已知先根和中根次序遍历序列构造二叉树。
⑦以广义表表示构造二叉树。
⑧判断两颗二叉树是否相等。
⑨求结点所在的层次。
⑩求一颗二叉树在后根次序遍历下第一个访问的结点。
⑪复制一颗二叉树。
⑫判断一颗二叉树是否为完全二叉树。
⑬实现二叉树后根次序遍历的非递归算法。
②编程:这道小题需要用到几个类,分别是结点类Node,树结点类BinaryNode,顺序栈LinkedStack,顺序队列LinkedQueue,然后编写BinaryTree类,逐一实现以上功能。
验证类为yanzheng。
③验证结果:图1图2图3图4图5图6图7图8图9图10图11图12图13(2)①审题:(2)声明三叉链表表示的二叉树类,实现二叉树的基本操作以及以下操作。
①构造一颗三叉链表表示的二叉树。
②返回指定结点的父母结点。
③返回指定结点的所有祖先结点。
④返回两结点最近的共同祖先结点。
②编程:编写结点类TriNode,然后编写TriBinaryNode类实现二叉树的各个功能和方法。
验证类为yanzheng2.③验证结果:图14(3)①审题:(3)在一颗中序线索二叉树中,实现以下操作。
①调用求结点的前驱结点算法,按中根次序遍历一颗中序线索二叉树。
②按后根次序遍历中序线索二叉树。
③在构造二叉树时进行线索化。
④插入、删除操作。
②编程:编写结点类ThreadNode,然后编写中性线索二叉树ThreadTreee逐一实现各个功能。
验证类为yanzheng3.③验证结果:图15图16图174、源码(1)BinaryTree类package实验4;public class BinaryTree<T>{public BinaryNode<T> root;public BinaryTree(){t his.root=null;}public void preOrder(){System.out.print("先根次序遍历二叉树:");preOrder(root);System.out.println();}public void preOrder(BinaryNode<T> p){if(p!=null){System.out.print(p.data.toString()+" ");preOrder(p.left);preOrder(p.right);}}public BinaryTree(T prelist[]){this.root=create(prelist);}private int i=0;public BinaryNode<T> create(T prelist[]){BinaryNode<T> p=null;if(i<prelist.length){T elem=prelist[i];i++;if(elem!=null){p=new BinaryNode<T>(elem);p.left=create(prelist);p.right=create(prelist);}}return p;}public BinaryNode<T> search(T key){//①输入叶子结点。
return search(root,key);}public BinaryNode<T> search(BinaryNode<T> p,T key){if(p==null||key==null)return null;if(p.data.equals(key))return p;BinaryNode<T> find=search(p.left,key);if(find==null)find=search(p.right,key);return find;}public BinaryNode<T> insertChild(BinaryNode<T> p,T x){if(p==null||x==null)return null;if(p.left==null){p.left=new BinaryNode<T>(x,null,null);return p.left;}else p.right=new BinaryNode<T>(x,null,null);return p;}public int yecount(){//②求二叉树中叶子结点个数。
return yecount(root);}public int yecount(BinaryNode<T> p){if(p==null)return 0;if(p!=null&&p.left==null&&p.right==null)return 1;return yecount(p.left)+yecount(p.right);}public BinaryNode<T> JHjiedian(){//③将每个结点的左子树与右子树交换。
return JHjiedian(root);}public BinaryNode<T> JHjiedian(BinaryNode<T> p){BinaryNode<T> q=null;q=p.left;p.left=p.right;p.right=q;if(p.left!=null){JHjiedian(p.left);}if(p.right!=null){JHjiedian(p.right);}return p;}public int twoyezi(){ //④验证二叉树的性质3:n0=n2+1。
return twoyezi(root);}public int twoyezi(BinaryNode<T> p){int i,j;if(p==null)return 0;else{i=twoyezi(p.left);j=twoyezi(p.right);if(p.left!=null&&p.right!=null)return i+j+1;elsereturn (i+j);}}public void DaJieDina(T value){//⑤输出值大于k的结点。
System.out.print("大于"+value+"的结点有:");BinaryNode<T> p = this.root;DaJieDina(p, value);System.out.println();}public void DaJieDina(BinaryNode<T> p, T value){if (p != null){if (((String) p.data).compareTo((String)value) > 0)System.out.print(p.data.toString() + " ");DaJieDina(p.left, value);DaJieDina(p.right, value);}}public BinaryTree(T prelist[],T inlist[]){//⑥已知先根和中根次序遍历序列构造二叉树。
this.root=create(prelist,inlist,0,0,prelist.length);}private BinaryNode<T> create(T prelist[],T inlist[],int preStart,int inStart,int n){if(n<=0)return null;T elem=prelist[preStart];BinaryNode<T> p=new BinaryNode<T>(elem);int i=0;while(i<n&&!elem.equals(inlist[inStart+i]))i++;p.left=create(prelist,inlist,preStart+1,inStart,i);p.right=create(prelist,inlist,preStart+i+1,inStart+i+1,n-1-i);return p;}public String toGenListString(){//⑦以广义表表示构造二叉树。
return"广义表表示为:"+toGenListString(root)+"\n";}public String toGenListString(BinaryNode<T> p){if(p==null)return null;String str=p.data.toString();if(p.left!=null||p.right!=null)str+="("+toGenListString(p.left)+","+toGenListString(p.right)+")";return str;}public boolean compareTree(BinaryNode<T> root2){//⑧判断两颗二叉树是否相等。