ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

第二次博客

2022-05-16 00:32:16  阅读:152  来源: 互联网

标签:p2 p1 Point double 博客 四边形 第二次 public


           

对于期中考试和四边形与五边形的题目,我刚开始绝对是懵的,但经过这些天的摸索已经有了初步理解。题目可以说很难。

涉及到单位知识点有继承、多态、封装。题量不算多但遭不住它难啊!

期中考试题:

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

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有