1、Java实验报告实 验 报 告课 程 名 称 Java技术 专 业 班 级 13-计算机科学与技术-1班学生姓名及学号 * 潘汀 指 导 教 师 钟华刚 实 验 地 点 计算中心 2015 2016 学年第 一 学期实验一 类的封装、继承、多态一、实验目的1复习、理解OOP的特征封装、继承和多态。2学会使用Java编写简单的类。理解类的属性和方法。3掌握关键字private, protected, public的作用。 4掌握多态的概念。 二、实验内容1分别编写两个类Point2D,Point3D来表示二维空间和三维空间的点,使之满足下列要求:(1) Point2D有两个整型成员变量x, y
2、(分别为二维空间的X,Y方向坐标),Point2D的构造方法要实现对其成员变量x, y的初始化。(2) Point2D有一个void型成员方法offset(int a, int b),它可以实现Point2D的平移。(3) Point3D是Point2D的直接子类,它有有三个整型成员变量x,y,z (分别为三维空间的X,Y,Z方向坐标),Point3D有两个构造方法:Point3D(int x,int y,int z)和Point3D(Point2D p,int z),两者均可实现对Point3D的成员变量x, y,z的初始化。(4) Point3D有一个void型成员方法offset(int
3、 a, int b,int c),该方法可以实现Point3D的平移。(5) 在Point3D中的主函数main()中实例化两个Point2D的对象p2d1,p2d2,打印出它们之间的距离,再实例化两个Point3D的对象p3d1,p3d2,打印出他们之间的距离。 提示:java.lang.Math.sqrt()方法2创建一个数组,随机生成Point2D或者Point3D的对象放于其中。最后依次调用数组中每个对象的“打印方法” ,显示数组中存储的对象是什么。 提示:java.lang.Math.random()方法 或者 java.util.Random类三、实验代码package exp1;
4、import java.util.Random;class Point2D int x,y; Point2D(int x,int y)this.x=x;this.y=y; void offset(int a,int b) this.x+=a;this.y+=b; void print() System.out.printf(Point2D:(%d,%d)n,x,y);class Point3D extends Point2D int z; Point3D(int x, int y,int z) super(x, y);this.z=z; void offset(int a,int b,int
5、c) this.x+=a;this.y+=b;this.z+=c; void print() System.out.printf(Point3D:(%d,%d,%d)n,x,y,z);public class Main static double distance(Point2D a,Point2D b) return java.lang.Math.sqrt(a.x-b.x)*(a.x-b.x)+(a.y-b.y)*(a.y-b.y); static double distance(Point3D a,Point3D b) return java.lang.Math.sqrt(a.x-b.x)
6、*(a.x-b.x)+(a.y-b.y)*(a.y-b.y)+(a.z-b.z)*(a.z-b.z); public static void main(String args) Point2D p2d1=new Point2D(1,1),p2d2=new Point2D(2,2); Point3D p3d1=new Point3D(1,1,1),p3d2=new Point3D(2,2,2); System.out.printf(%f %fn,distance(p2d1,p2d2),distance(p3d1,p3d2); int T=10; Point2D arr=new Point2DT;
7、 for(int i=0;iT;i+) int type=(int)(java.lang.Math.random()*2); int x=(int)(java.lang.Math.random()*100), y=(int)(java.lang.Math.random()*100), z=(int)(java.lang.Math.random()*100); if(type=0) arri=new Point2D(x,y); else arri=new Point3D(x,y,z); for(int i=0;i e2.quantity) return 1; else if(e1.quantit
8、ye2.quantity) return -1; else return 0; public class Main public static void main(String args) throws IOException FileReader in=new FileReader(Inventory.txt); FileWriter out1=new FileWriter(Shipping.txt); FileWriter out2=new FileWriter(Errors.txt); BufferedWriter shipping=new BufferedWriter(out1); B
9、ufferedWriter errors=new BufferedWriter(out2); Scanner scan=new Scanner(in); String number = null,supplier,description; int quantity; Map map=new HashMap(); Map transHash=new HashMap(); Vector trans=new Vector(),del=new Vector(), rec=new Vector(),add=new Vector(); /记录生成 while(scan.hasNext() number=s
10、can.next(); quantity=scan.nextInt(); supplier=scan.next(); description=scan.next(); map.put(number, new Item(number,quantity,supplier,description); String type; in=new FileReader(Transactions.txt); scan=new Scanner(in); /数据读入-离线存储 while (scan.hasNext() type = scan.next(); if (type.equals(0) number =
11、 scan.next(); quantity = scan.nextInt(); supplier = scan.next(); String hashText=number+#+supplier; if(!transHash.containsKey(hashText) /Hash发货单 transHash.put (hashText, new Item(number,quantity,supplier,None); else transHash.get(hashText).quantity+=quantity; else if (type.equals(R) number = scan.ne
12、xt(); quantity = scan.nextInt(); rec.add(new Item(number,quantity,None,None); else if (type.equals(D) number = scan.next(); del.add(new Item(number,-1,); else if (type.equals(A) number = scan.next(); supplier = scan.next(); description = scan.next(); add.add(new Item(number,0,supplier,description);
13、/ for (Map.Entry entry : transHash.entrySet() trans.add(new Item(entry.getValue().number,entry.getValue().quantity,entry.getValue().supplier,None); /合并发货单写入 shipping.write(entry.getValue().number + ); shipping.write(String.valueOf(entry.getValue().quantity) + ); shipping.write(entry.getValue().suppl
14、ier); shipping.newLine(); Collections.sort(trans, new TransCompare(); /按发货数量升序排序 for(int i=0;iadd.size();i+) /添加 Item item=add.get(i); map.put(item.number,item); System.out.printf(添加存种:%s 供应商:%s 描述: %sn,item.number,item.supplier,item.description); for(int i=0;irec.size();i+) /收货 Item item=rec.get(i)
15、,ret=map.get(item.number); ret.quantity+=item.quantity; map.put(ret.number,ret); System.out.printf(收货:%s 数量:%d 剩余:%dn,item.number,item.quantity,ret.quantity); for(int i=0;itrans.size();i+) /发货 Item item=trans.get(i),ret=map.get(item.number); if(ret.quantityitem.quantity) System.out.printf(发货%s给%s失败,
16、剩余:%d 需求:%dn,item.number,item.supplier,ret.quantity,item.quantity); errors.write(item.supplier+ ); errors.write(item.number+ ); errors.write(String.valueOf(item.quantity); errors.newLine(); continue; ret.quantity-=item.quantity; map.put(item.number,ret); System.out.printf(发货%s给%s成功, 剩余:%d 需求:%dn,ite
17、m.number,item.supplier,ret.quantity,item.quantity); for(int i=0;idel.size();i+) /删除 Item item=del.get(i),ret=map.get(item.number); if(ret=null) continue; /去除无效 if(ret.quantity!=0) System.out.printf(删除%s失败 ,数量剩余:%dn,item.number,ret.quantity); errors.write(0 ); errors.write(item.number+ ); errors.writ
18、e(String.valueOf(ret.quantity); errors.newLine(); continue; System.out.printf(删除%s成功,n,item.number); map.remove(item.number); shipping.flush(); errors.flush(); 四、实验结果五、思考题 1. 对整个实验进行总结,写出实验心得。【摘要】该实验本质就是一个模拟题。要求模拟一个进货发货系统。注意关键点:数据不能在线处理。体现在两个方面:读入操作顺序与实际工作顺序不符读入操作需要Hash与合并因此,只能采取离线保存+处理的手段。由于数据主键并非整型值,如果是用数组来保存,需要手写一个Hash表来Hash。考虑到基于红黑树实现的关联Map容器,所以使用Map来Hash和模拟数据库。【数据结构设计】Map map 作为
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1