前言
这次JAVA期中考试, 总体上来讲几乎没有难度。只要上课认真听了, 并且下课有认真写PTA的话, 我认为难度几乎就是0。因为题目简单, 也不涉及到什么设计的内容(因为类图已经给出来了)。所以这里就不分析太多了。
实现
老样子先看题目
-
第一题
设计一个类表示平面直角坐标系上的点Point,私有属性分别为横坐标x与纵坐标y,数据类型均为实型数,除构造方法以及属性的getter与setter方法外,定义一个用于显示信息的方法display(),用来输出该坐标点的坐标信息,格式如下:(x,y),数值保留两位小数。为简化题目,其中,坐标点的取值范围设定为(0,200]。若输入有误,系统则直接输出Wrong Format
设计一个类表示平面直角坐标系上的线Line,私有属性除了标识线段两端的点point1、point2外,还有一个字符串类型的color,用于表示该线段的颜色,同样,除构造方法以及属性的getter与setter方法外,定义一个用于计算该线段长度的方法getDistance(),还有一个用于显示信息的方法display(),用来输出线段的相关信息,输出格式如下:
The line's color is:颜色值 The line's begin point's Coordinate is: (x1,y1) The line's end point's Coordinate is: (x2,y2) The line's length is:长度值
其中,所有数值均保留两位小数,建议可用String.format("%.2f", data)方法。
-
第二题
在“点与线(类设计)”题目基础上,对题目的类设计进行重构,以实现继承与多态的技术性需求。
对题目中的点Point类和线Line类进行进一步抽象,定义一个两个类的共同父类Element(抽象类),将display()方法在该方法中进行声明(抽象方法),将Point类和Line类作为该类的子类。
再定义一个Element类的子类面Plane,该类只有一个私有属性颜色color,除了构造方法和属性的getter、setter方法外,display()方法用于输出面的颜色,输出格式如下:The Plane's color is:颜色
在主方法内,定义两个Point(线段的起点和终点)对象、一个Line对象和一个Plane对象,依次从键盘输入两个Point对象的起点、终点坐标和颜色值(Line对象和Plane对象颜色相同),然后定义一个Element类的引用,分别使用该引用调用以上四个对象的display()方法,从而实现多态特性。示例代码如下:
element = p1;//起点Point element.display(); element = p2;//终点Point element.display(); element = line;//线段 element.display(); element = plane;//面 element.display();
-
第三题
在“点与线(继承与多态)”题目基础上,对题目的类设计进行重构,增加容器类保存点、线、面对象,并对该容器进行相应增、删、遍历操作。在原有类设计的基础上,增加一个GeometryObject容器类,其属性为ArrayList
类型的对象(若不了解泛型,可以不使用 )
增加该类的add()方法及remove(int index)方法,其功能分别为向容器中增加对象及删除第index - 1(ArrayList中index>=0)个对象。
在主方法中,用户循环输入要进行的操作(choice∈[0,4]),其含义如下:1:向容器中增加Point对象
2:向容器中增加Line对象
3:向容器中增加Plane对象
4:删除容器中第index - 1个数据,若index数据非法,则无视此操作
0:输入结束
从上面三个题目我们可以看到一条清晰的逻辑。我们首先写一个点类, 里面包含两个double属性。以及一个线类, 包含两个点以及一个String属性。最后有一个Plane类包含一个String的属性。紧接着抽象出一个Element类使display方法作为接口。最后的ArrayList则是对多态的运用。至于那些构造函数和getter和setter直接用IDE自动生成就好了。到最后题目给出的类图是这样的。
应为比较简单, 所以我们直接看代码
-
第一题
构建点类和线类
// 点类 class Point { private double x; private double y; public Point(double x, double y) { this.x = x; this.y = y; } public double getX() { return x; } public void setX(double x) { this.x = x; } public double getY() { return y; } public void setY(double y) { this.y = y; } public void display() { String sx = String.format("%.2f", x); String sy = String.format("%.2f", y); System.out.println("(" + sx + "," + sy + ")"); } } // 线类 class Line { private Point point1; private Point point2; private String color; public Line(Point point1, Point point2, String color) { this.point1 = point1; this.point2 = point2; this.color = color; } public Point getPoint1() { return point1; } public void setPoint1(Point point1) { this.point1 = point1; } public Point getPoint2() { return point2; } public void setPoint2(Point point2) { this.point2 = point2; } public String getColor() { return color; } public void setColor(String color) { this.color = color; } // 获得距离 public double getDistance() { return Math.sqrt(Math.pow(point1.getX() - point2.getX(), 2) + Math.pow(point1.getY() - point2.getY(), 2)); } public void display() { System.out.println("The line's color is:" + color); System.out.println("The line's begin point's Coordinate is:"); point1.display(); System.out.println("The line's end point's Coordinate is:"); point2.display(); String distance = String.format("%.2f", getDistance()); System.out.println("The line's length is:" + distance); } }
-
第二题
抽象出一个Element类
// 抽象出的 Element 类 abstract class Element { public abstract void display(); } class Point extends Element { // ... 这里省略 因为几乎没有变化 } class Line extends Element { // ... 这里省略 因为几乎没有变化 } // Plane 类 class Plane extends Element { private String color; public Plane(String color) { this.color = color; } public String getColor() { return color; } public void setColor(String color) { this.color = color; } @Override public void display() { System.out.println("The plane's color is:" + color); } }
-
第三题
建立一个 GeometryObject 类, 用 ArrayList<Element>作为属性
class GeometryObject { private ArrayList<Element> list = new ArrayList<>(); public GeometryObject() {} public void add(Element e) { list.add(e); } public ArrayList<Element> getList() { return list; } public void remove(int index) { if(index < 0 || index >= list.size()) return; list.remove(index - 1); } } // 抽象出的 Element 类 abstract class Element { public abstract void display(); } class Point extends Element { // ... 这里省略 因为几乎没有变化 } class Line extends Element { // ... 这里省略 因为几乎没有变化 } // Plane 类 class Plane extends Element { // ... 这里省略 因为几乎没有变化 }
总结
从以上的代码也可以看的出来。这次的期中考试没有很难。只是简单的运用了一下多态和泛型的语法。要求我们会使用ArrayList就可以比较轻松的写出来。而这些都是上课讲过的内容。所以说到底还是要上课认真听讲。下课要多写多练。
就整个课程而言。因为我学过C++, 并且了解过JAVA的语法。所以个人认为, 对于面向对象的思想我是没有简单的停留在表面的。但是这也是正是我缺少的部分。因为是个人的自学而不是系统的学习, 难免会缺乏系统的方法以及系统的理解。比如上课讲的"单一职责", 我在以前通过东拼西凑的知识也大概能够意识到需要这样做。但是如果要叫我说出一套具体的理论来的话,我也只能支支吾吾什么都说不出了。所以我认为, 就目前而言, JAVA课使我学到的就是怎么系统的设计一个程序。虽然这部分目前讲的还不是很多。但是以后会越来越多的。
标签:JAVA,String,Point,期中考试,public,color,Element,display From: https://www.cnblogs.com/usersname/p/16830495.html