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 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
本站由北京市万商天勤律师事务所王兴未律师提供法律服务