第二次博客
作者:互联网
对于期中考试和四边形与五边形的题目,我刚开始绝对是懵的,但经过这些天的摸索已经有了初步理解。题目可以说很难。
涉及到单位知识点有继承、多态、封装。题量不算多但遭不住它难啊!
期中考试题:
-
设计一个类表示平面直角坐标系上的点Point,私有属性分别为横坐标x与纵坐标y,数据类型均为实型数,除构造方法以及属性的getter与setter方法外,定义一个用于显示信息的方法display(),用来输出该坐标点的坐标信息,格式如下:
(x,y)
,数值保留两位小数。为简化题目,其中,坐标点的取值范围设定为(0,200]
。若输入有误,系统则直接输出Wrong Format
-
设计一个类表示平面直角坐标系上的线Line,私有属性除了标识线段两端的点point1、point2外,还有一个字符串类型的color,用于表示该线段的颜色,同样,除构造方法以及属性的getter与setter方法外,定义一个用于计算该线段长度的方法getDistance(),还有一个用于显示信息的方法display(),用来输出线段的相关信息,输出格式如下:
-
代码如下
package pta5; import java.util.Scanner; public class As { public static void main(String[] args) { Scanner input = new Scanner(System.in); double x1 = input.nextDouble(); double y1 = input.nextDouble(); double x2 = input.nextDouble(); double y2 = input.nextDouble(); String color = input.nextLine(); Point one = new Point(x1,y1); Point second = new Point(x2,y2); Line a = new Line(one, second, color); a.display(); } } class Point { private double x; private double y; public Point() { } public Point(double x,double y) { this.x=x; this.y=y; } public void setX(double x) { if(x>0&&x<=200) this.x = x; else this.y = 0; } public double getX() { return x; } public void setY(double y) { if(y>0&&y<=200) this.y = y; else this.y = 0; } public double getY() { return y; } } /* 设计一个类表示平面直角坐标系上的线Line,私有属性除了标识线段两端的点point1、point2外, 还有一个字符串类型的color,用于表示该线段的颜色,同样,除构造方法以及属性的getter与setter方法外, 定义一个用于计算该线段长度的方法getDistance(),还有一个用于显示信息的方法display(),用来输出线段的相关信息 */ class Line{ private Point first; private Point second; String color; public Line() { } public Line(Point first, Point second, String color) { this.first = first; this.second= second; this.color = color; } public Double getDistance() { return Math.sqrt(Math.pow(second.getY() - first.getY(),2) + Math.pow(second.getX() - first.getX(),2)) ; } public void display() { System.out.println("The line's color is:"+color); System.out.println("The line's begin point's Coordinate is:"+first.getX()+" "+first.getY()); System.out.println("The line's end point's Coordinate is:"+second.getX()+" "+second.getY()); System.out.println("The line's length is:"+String.format("%.2f", getDistance())); } }
第一题还是较为简单,两个类,但还需改进比如未按题目要求在point类里添加display();
所以可以在line改写为
System.out.println("The line's begin point's Coordinate is:");
p1.display();
System.out.println("The line's end point's Coordinate is:");
p2.display();
期中考试第二题
- 对题目中的点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()方法,
package pta5; import java.util.Scanner; public class Sdfgj { public static void main(String[] args) { // TODO Auto-generated method stub Scanner in = new Scanner(System.in); double x1 = in.nextDouble(); double y1 = in.nextDouble(); double x2 = in.nextDouble(); double y2 = in.nextDouble(); String color = in.next(); Point p1 = new Point(x1, y1); Point p2 = new Point(x2, y2); Plane plane = new Plane(color); Line line = new Line(p1, p2, color); line.display(); Element element1=p1; element1.display(); Element element2= p2; element2.display(); Element element4 = plane; element4.display(); } } abstract class Element{ public abstract void display(); } class Plane extends Element{ private String color; Plane(String color){ this.color=color; } public String getColor(){ return this.color; } public void setColor(String color){ this.color=color; } public void display(){ System.out.println("The Plane's color is:"+this.color); } } class Point extends Element{ private double x; private double y; public Point() { } public Point(double x, double y) { this.x = x; this.y = y; } public void setX(double x) { this.x = x; } public double getX() { return x; } public void setY(double y) { this.y = y; } public double getY() { return y; } public void display() { System.out.printf("(%.2f,%.2f)\n",this.x,this.y); } } class Line { private Point p1; private Point p2; private String color; public Line() { } public Line(Point p1, Point p2, String color) { this.p1 = p1; this.p2 = p2; this.color = color; } public void setPoint1(Point p1) { this.p1 = p1; } public Point getPoint1() { return p1; } public void setPoint2(Point p2) { this.p2 = p2; } public Point getPoint2() { return p2; } public double getDistance() { double distance; distance = Math.sqrt(Math.pow(p1.getX() - p2.getX(), 2) + Math.pow(p1.getY() - p2.getY(),2 )); return distance; } public void display() { if(p1.getX() > 0 && p1.getX() <=200 && p1.getY() > 0 && p1.getY() <= 200 && p2.getX() > 0 && p2.getX() <= 200 && p2.getY() > 0 && p2.getY() <=200) { System.out.println("The line's color is:"+color); System.out.println("The line's begin point's Coordinate is:"); p1.display(); System.out.println("The line's end point's Coordinate is:"); p2.display(); System.out.println("The line's length is:"+String.format("%.2f", getDistance())); } else { System.out.println("Wrong Format"); } } }
其实我这代码并不完全正确当我引用
Element element3= line;
element3.display();报错Type mismatch: cannot convert from Line to Element
第三通容器类说实话我不会。
第四次大作业:
蛟龙号、、、、、不做分析
四边形的题:
用户输入一组选项和数据,进行与四边形有关的计算。
以下四边形顶点的坐标要求按顺序依次输入,连续输入的两个顶点是相邻顶点,第一个和最后一个输入的顶点相邻。
选项包括:
1:输入四个点坐标,判断是否是四边形、平行四边形,判断结果输出true/false,结果之间以一个英文空格符分隔。
2:输入四个点坐标,判断是否是菱形、矩形、正方形,判断结果输出true/false,结果之间以一个英文空格符分隔。 若四个点坐标无法构成四边形,输出"not a quadrilateral"
3:输入四个点坐标,判断是凹四边形(false)还是凸四边形(true),输出四边形周长、面积,结果之间以一个英文空格符分隔。 若四个点坐标无法构成四边形,输出"not a quadrilateral"
4:输入六个点坐标,前两个点构成一条直线,后四个点构成一个四边形或三角形,输出直线与四边形(也可能是三角形)相交的交点数量。如果交点有两个,再按面积从小到大输出四边形(或三角形)被直线分割成两部分的面积(不换行)。若直线与四边形或三角形的一条边线重合,输出"The line is coincide with one of the lines"。若后四个点不符合四边形或三角形的输入,输出"not a quadrilateral or triangle"。
后四个点构成三角形的情况:假设三角形一条边上两个端点分别是x、y,边线中间有一点z,另一顶点s:
1)符合要求的输入:顶点重复或者z与xy都相邻,如x x y s、x z y s、x y x s、s x y y。此时去除冗余点,保留一个x、一个y。
2) 不符合要求的输入:z 不与xy都相邻,如z x y s、x z s y、x s z y
5:输入五个点坐标,输出第一个是否在后四个点所构成的四边形(限定为凸四边形,不考虑凹四边形)或三角形(判定方法见选项4)的内部(若是四边形输出in the quadrilateral/outof the quadrilateral,若是三角形输出in the triangle/outof the triangle)。如果点在多边形的某条边上,输出"on the triangle或者on the quadrilateral"。若后四个点不符合四边形或三角形,输出"not a quadrilateral or triangle"。
输入格式:
基本格式:选项+":"+坐标x+","+坐标y+" "+坐标x+","+坐标y。点的x、y坐标之间以英文","分隔,点与点之间以一个英文空格分隔。
输出格式:
基本输出格式见每种选项的描述。
异常情况输出:
如果不符合基本格式,输出"Wrong Format"。
如果符合基本格式,但输入点的数量不符合要求,输出"wrong number of points"。
注意:输出的数据若小数点后超过3位,只保留小数点后3位,多余部分采用四舍五入规则进到最低位。小数点后若不足3位,按原始位数显示,不必补齐。例如:1/3的结果按格式输出为 0.333,1.0按格式输出为1.0
选项1、2、3中,若四边形四个点中有重合点,输出"points coincide"。
选项4中,若前两个输入线的点重合,输出"points coincide"。
分析:
- Point类-------包含点的属性(横坐标x,纵坐标),对坐标进行赋值,计算点到另外的点的距离
a.double x;double y; //定义横坐标x,纵坐标y
b.public void input(Arraylist<String> a); //给x,y赋值
d.public boolean chack_point(Point p); //判断两点是否重合
- Line类---------包含线的属性(点p1,点p2),计算线的斜率,计算另外一点到直线距离,判断点是否在直线上,判断两直线是否平行,计算两直线交点;
a.Point p1 = new Point();Point p2 = new Point();
b.public void input(Arraylist<String> a); //给点p1,p2赋值
c.public double calculate_slope(void); //计算线的斜率
public double calculatedistance(Point p) //计算点到另一点的距离即边的距离
用于计算1\2要求只要相邻的两边斜路不相等即可构成四边形,当相对的两边平行且相等,构成平行四边形,
当相邻的两条边斜相乘等于-1构成矩形在递进,在其基础上四边相等即正方,同时也可计算周长和面积(两个三角形的面积)
但凹凸四边形的判定很难.相了很久发现
四边形面积,可以拆为两个三角形面积之和.
对于凸四边形, 任意不相邻两点连线拆开的三角形面积和
但凹四边形,却不是这样的,只有凹点对应的连线拆开的三角形面积和.
基于上面两条就可以判断了:
p1,p2,p3,p4 四个点顺序组成的四边形.
s0 = S(p1,p2,p3)+ S(p3,p4,p1)
s1 = S(p2,p3,p4)+S(p4,p1,p2)
如果s0 == s1 则是凸四边形.否则就是凹四边形.
五边形的题老实说毫无头绪.
总结:
这几次作业暴露了我很多的问题意识到总结学习知识量不够,不自觉等,基本还停留在原地,现在我还只是学习到了Java的一些皮毛,对Java的学习还远远不够,
使用题目给的类图发现会做一点,但在自己进行类设计时发现自己对设计懵逼,多加练习,pta也能得到自己想要得的分。
标签:p2,p1,Point,double,博客,四边形,第二次,public 来源: https://www.cnblogs.com/306119fy/p/16275400.html