您好,欢迎来到要发发知识网。
搜索
您的当前位置:首页java第三次实验报告

java第三次实验报告

来源:要发发知识网


java实验报告

实验题目实现可深度复制的栈 学生姓名 指导教师 学 院 专业班级 完成时间

目录

一、实验目的 ................................................................................................................................... 3 二、实验开发环境和工具 ............................................................................................................... 3 三、问题描述: ............................................................................................................................... 3 四.设计简要描述 ........................................................................................................................... 3 五.程序清单 ................................................................................................................................... 4 六.调试结果分析: ....................................................................................................................... 4 七.心得体会: ............................................................................................................................... 8

一、实验目的

1.了解和掌握ArrayList的基本用法

2. 了解和掌握用ArrayList实现一些基本的数据结构

二、实验开发环境和工具

可以在Linux或者Windows操作系统上搭建开发环境,可使用集成开发环境Eclipse,使用Java语言,工具包使用JDK1.8。

三、问题描述:

基于ArrayList实现可以深度复制(Deep Copy)的栈结构。

1.首先用ArrayList实现栈结构

2. 接着将第1步实现的栈通过Clonable接口实现深度复制

四.设计简要描述

1.数据结构设计

栈的操作将在Mystacks类中全部实现,其中Mystacks类中定义私有的ArrayList数据list,以便在函数中的使用。 2.函数设计

总体来说,栈中函数的实现都是通过ArrayList类中的方法实现的,也即通过list对象来调用ArrayList的方法。其中需要中已的是,弹出栈顶元素的函数在弹出后,要返回该弹出元素的内容;另一个则是栈的输出函数是重置了toString()函数,具体实现代码为:

3.深度复制实现

用cloneable接口将深度复制实现。这一接口的使用就是令原class继承cloneable接口,这样Mystacks类的对象就能通过调用object类的clone()方法实现复制。Cloneable是一个标记(marker)接口: 空接口。标记接口不包含常量和方法. 用来表示一个类具有某种属性.实现了Cloneable接口的类被标记为可复制的。接口原型为:

packagejava.lang;

public interface Cloneable { }

五.程序清单

packagemystacks;

importjava.util.ArrayList;

public class Mystacks implements Cloneable { privateArrayList list; publicMystacks() { list= new ArrayList(); } publicbooleanisEmpty() { returnlist.isEmpty(); } publicintgetSize() { returnlist.size(); } publicint peek() { return (int) list.get(getSize() - 1); } publicint pop() { int o = (int)list.get(getSize() - 1); list.remove(getSize() - 1); return o; }

public void push(int o) { list.add(o); } public String toString() { return list.toString(); } public static void main(String[] args){ Mystacks list; list=new Mystacks(); list.push(123); list.push(234); list.push(345); list.push(456); list.push(678); System.out.println(\"现在栈中的元素是:\"+list.toString()); System.out.println(\"判断栈是否为空,空返回true:\"+list.isEmpty()); System.out.println(\"栈中元素的个数为:\"+list.getSize()); System.out.println(\"返回栈顶元素:\"+list.peek()); System.out.println(\"弹出栈顶元素并输出:\"+list.pop()); System.out.println(\"现在栈中的元素是:\"+list.toString()); Mystackslistcopy; listcopy =new Mystacks(); try { listcopy=(Mystacks)list.clone();//注意此处要进行强制转换,因为clone()是object的方法,不能自动转换为Mystacks } catch (CloneNotSupportedException e) { // TODO Auto-generated catch block e.printStackTrace(); }

System.out.println(\"复制后的listcopy内容为:\"+listcopy.toString()); } }

六.调试结果分析:

1.栈的建立

栈的建立过程还算顺利,未存数据实战的输出为:

2.存入数据 构建栈成功后,接下来,就是要让数据存入栈中。但是在这个环节,出现了问题。当我在代码中加入下列代码:

但是输出的依然是构建栈成功后的结果,这表明我的分配存储空间是不成功的。那么,怎样正确存储呢,我真的不知道啊。。。

后来经过更正,虽然钟表完整的出现在scene中,但并不处于中心位置: 3.深度复制的实现

在将cloneable()接口实现完成后,调试结果为:

错误原因是未将clone()进行强制转换。最后在Eclipse中运行结果为:

但是在命令行下运行时显示:

经过语句:javac Mystacks.java –Xlint:unchecked 重新编译后显示:

于是将代码下段

改为:

七.心得体会:

这次的实验主要接触了两个方面,一是java中栈的应用,另一是java中接口的使用。在使用栈的方法过程中,体会到了java里的封装使得问题的简单化,对复杂过程的封装能让我们把精力放在解决的客观问题上。因为本学期也同时学习了数据结构这门课程,了解到c语言也就是最底层的语言是怎样实现栈的操作

的,两者比较,前者明了很多。就像一个是生产者,一个是使用者。

在接触了接口后,了解到它类似于一个抽象类,同样他的使用方法也很简单,但是解决了很多问题,也许这就是其实用性所在。

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- net188.cn 版权所有 湘ICP备2022005869号-2

违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务