首页 > 编程语言 >JAVA 期中考试

JAVA 期中考试

时间:2022-10-28 21:34:41浏览次数:45  
标签:JAVA String Point 期中考试 public color Element display

前言

这次JAVA期中考试, 总体上来讲几乎没有难度。只要上课认真听了, 并且下课有认真写PTA的话, 我认为难度几乎就是0。因为题目简单, 也不涉及到什么设计的内容(因为类图已经给出来了)。所以这里就不分析太多了。

实现

老样子先看题目

  1. 第一题

    设计一个类表示平面直角坐标系上的点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)方法。

  2. 第二题

    在“点与线(类设计)”题目基础上,对题目的类设计进行重构,以实现继承与多态的技术性需求。

    对题目中的点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();
    
  3. 第三题
    在“点与线(继承与多态)”题目基础上,对题目的类设计进行重构,增加容器类保存点、线、面对象,并对该容器进行相应增、删、遍历操作。

    在原有类设计的基础上,增加一个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自动生成就好了。到最后题目给出的类图是这样的。
img

应为比较简单, 所以我们直接看代码

  1. 第一题

    构建点类和线类

    // 点类
    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);
        }
    }
    
  2. 第二题

    抽象出一个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);
        }
    }
    
  3. 第三题

    建立一个 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

相关文章

  • 【笔记05】Javascript - 基本概念 - (函数递归)
    先看一个试题: 求n的阶乘通常,我们会写:functionfac(num){varres=1;for(vari=1;i<=num;i++){res*=i;}returnres;}观察阶乘可以发现两个特点:特点一:......
  • java题目集总结4~5&期中
    1.前言:在这一阶段Java的学习过程中,我们学习了继承与多态,抽象类与接口,异常处理方式以及圈复杂度的判定还有其他的常用方法等,进行完成了更进一步的相关大作业(点线形系......
  • Blog2-pta题目集4-5以及期中考试总结
    一、前言1.pta题目集4(凸四边形的计算)总结    本题题目难度比第三次的难度要更大,更为复杂,总共有三道题目,涉及到了正则表达式的使用,对于字符串的处理,类的涉及......
  • PTA题目集4~5及期中考试的总结
    一、前言  题目集四题目量不大,共三题,分别需要运用到正则表达式去判断每行输入的数字,构建多个类来实现凸四边形的计算实现其功能,也需要运用到正则表达式,以及构建一个银行......
  • 四边形,五边形,期中考试总结
    一、前言:四、五边形以及期中考试总结(1)点线形系列4-凸四边形的计算:该题是第四次作业的第二题,分值很高,难度比较大。本题中用到了正则表达式,数值与字符之间的转换,以及格式化f......
  • Java多线程(5):CAS
    您好,我是湘王,这是我的51CTO博客,欢迎您来,欢迎您再来~​在JDK1.5之前,Java的多线程都是靠synchronized来保证同步的,这会引起很多性能问题,例如死锁。但随着Java的不断完善,JNI(Java......
  • JavaScript--DOM
    一、DOM的概述1、文档对象模型(DOM,DocumentObjectModel)是HTML和XML文档的编程接口。DOM表示由多层节点构成的文档,通过它开发者可以添加、删除和修改页面的各个部分......
  • JavaScript--ES5和ES6(上)
    一、概述es表示ECMASCript,他是从es3,es5,es6,es5是2009.12月发布的,es6是2015.6月发布的。vue2完全支持es5的(vue3完全支持es6的),react完全支持es6二、es5的新特性1、严格模......
  • JavaScript--cookie
    一、概述cookie总是保存在客户端中(浏览器端)。cookie为了保存sessionID出现的。cookie的出现解决了http无状态的问题。二、特性cookie是不安全的cookie是可以被篡......
  • JavaScript--Date
    一、Date的概述在JavaScript中,Date类型是用来保存日期的,它能精确到1970年1月1日之前或之后的285616年。二、Date的声明使用new关键字声明要创建一个日期对象,使用new操......