第二次博客

前言:

在长达半个学期的JAVA课程学习下,在老师的指导下,我发觉JAVA其实并不是十分难学,只要我们能掌握学期JAVA的方法,不仅仅是各种使用的方法,还有对待学习的态度都决定着我们能否学好这门课程。在最开始的那三次PTA大作业后,老师也是继续在PTA和OOP上陆续发布了各种各样的作业与实验让我们对自己所学习的内容做出总结与复习,并在此之后对我们进行了一次期中测验,期中有三个题目都是我们此前半个学习所学习的内容的相关知识,在此我对这几次的PTA作业与期中考试的JAVA语言的学习做出一个总结。

 所学内容:

 

(1)JAVA语言与c语言的区别:

 

                   c:数据结构和算法。

 

                 JAVA:对象与消息的交互手段与方法。

 

(2)类的关系:

 

         聚合:整体与部分生存期不一致。

 

         组合:整体与部分生存期一致。

 

(3)类设计的原则

(4)多态问题

(5)抽象类的概念与使用

 

(4)课堂的举例:

 

          雨刷器的控制:

import  java.util.Scanner;
 
public class Driver {
 
    public Driver(){
 
    }
 
    public static void work(){
        Scanner input = new Scanner(System.in);
        Lever lever = new Lever();
        Dial dial = new Dial();
        Brush brush = new Brush();
        Agent agent = new Agent(lever,dial,brush);
        System.out.println("1为升档,2为降档,3为升刻度,4为降刻度");
        int choice=input.nextInt();
        Test test = new Test();
        while(true) {
            switch(choice) {
                case 1:lever.upPos();break;
                case 2:lever.downPos();break;
                case 3:dial.upPos();break;
                case 4:dial.downPos();break;
            }
 
            agent.processSpeed();
            test.view(lever.getPos(),dial.getPos(),brush.getSpeed());
            System.out.println("1为升档,2为降档,3为升刻度,4为降刻度");
            choice = input.nextInt();
        }
    }
}

  等。

PTA题目的总结:

第四次题目集:

(1):

题目要求:

背景简介:

“蛟龙号”载人深潜器是我国首台自主设计、自主集成研制的作业型深海载人潜水器,设计最大下潜深度为7000米级,也是目前世界上下潜能力最强的作业型载人潜水器。“蛟龙号”可在占世界海洋面积99.8%的广阔海域中使用,对于我国开发利用深海的资源有着重要的意义。

中国是继美、法、俄、日之后世界上第五个掌握大深度载人深潜技术的国家。在全球载人潜水器中,“蛟龙号”属于第一梯队。目前全世界投入使用的各类载人潜水器约90艘,其中下潜深度超过1000米的仅有12艘,更深的潜水器数量更少,目前拥有6000米以上深度载人潜水器的国家包括中国、美国、日本、法国和俄罗斯。除中国外,其他4国的作业型载人潜水器最大工作深度为日本深潜器的6527米,因此“蛟龙号”载人潜水器在西太平洋的马里亚纳海沟海试成功到达7020米海底,创造了作业类载人潜水器新的世界纪录。

从2009年至2012年,蛟龙号接连取得1000米级、3000米级、5000米级和7000米级海试成功。下潜至7000米,说明蛟龙号载人潜水器集成技术的成熟,标志着我国深海潜水器成为海洋科学考察的前沿与制高点之一。

2012年6月27日11时47分,中国“蛟龙”再次刷新“中国深度”——下潜7062米。6月3日,“蛟龙”出征以来,已经连续书写了5个“中国深度”新纪录:6月15日,6671米;6月19日,6965米;6月22日,6963米;6月24日,7020米;6月27日,7062米。下潜至7000米,标志着我国具备了载人到达全球99%以上海洋深处进行作业的能力,标志着“蛟龙”载人潜水器集成技术的成熟,标志着我国深海潜水器成为海洋科学考察的前沿与制高点之一,标志着中国海底载人科学研究和资源勘探能力达到国际领先水平。

‘蛟龙’号是我国载人深潜发展历程中的一个重要里程碑。它不只是一个深海装备,更代表了一种精神,一种不畏艰险、赶超世界的精神,它是中华民族进军深海的号角。

了解蛟龙号”载人深潜器“的骄人业绩,为我国海底载人科学研究和资源勘探能力达到国际领先水平而自豪,小伙伴们与祖国同呼吸、共命运,一定要学好科学文化知识、提高个人能力,增强创新意识,做事精益求精,立科技报国之志!

请编写程序,实现如下功能:读入关于蛟龙号载人潜水器探测数据的多行字符串,从给定的信息找出数字字符,输出每行的数字之和。

提示 若输入为“2012年2月”,则该行的输出为:2014。若干个连续的数字字符作为一个整体,以十进制形式相加。

输入格式:

读入关于蛟龙号载人潜水器探测数据的多行字符串,每行字符不超过80个字符。

以"end"结束。

输出格式:

与输入行相对应的各个整数之和。

输入样例1:

2012年6月27日11时47分,中国“蛟龙”再次刷新“中国深度”——下潜7062米
6月15日,6671米
6月19日,6965米
6月22日,6963米
6月24日,7020米
6月27日,7062米
下潜至7000米,标志着我国具备了载人到达全球99%以上海洋深处进行作业的能力
end
 

输出样例1:

9165
6692
6990
6991
7050
7095
7099
 

输入样例2:

全世界投入使用的各类载人潜水器约90艘,下潜深度超过1000米的仅有12艘,更深的潜水器数量更少
6000米以上深度载人潜水器的国家包括中国、美国、日本、法国和俄罗斯
日本深潜器下潜6527米,蛟龙号在马里亚纳海沟海试成功到达7020米海底,创造了新的世界纪录
从2009年至2012年,蛟龙号接连取得1000米级、3000米级、5000米级和7000米级海试成功
下潜至7000米,说明蛟龙号载人潜水器集成技术的成熟
end
 

输出样例2:

1102
6000
13547
20021
7000
代码如下:
import java.util.Scanner;
import java.util.regex.Pattern;

public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        String hs[]=new String[50];
        int i=0;
        while (true) {
            String a = in.nextLine();
            if(!a.equals("end"))
            {
                hs[i]=a;
                //System.out.println(hs[i]);
            }
            else
                break;
            i=i+1;
        }
        for(int k=0;k<i;k++)
        {
            int num=0;
             String regEx="[^0-9]+"; 
             Pattern pattern = Pattern.compile(regEx);
             String[] cs = pattern.split(hs[k]);
            for(int m=0;m<cs.length;m++)
            {
                int temp = Integer.parseInt(cs[m]);
                num=num+temp;
                //System.out.println(num);
            }
            System.out.println(num);
        }
    }
}

踩坑心得:

①:无法用正确的正则表达式来截取相关的要点,使得无法让代码运行并达到相应的结果。

②:对相关的函数调用还未熟练掌握

改进建议:

①:网上寻找了正确的正则表达式使得代码能够正确运行并输出相应的结果。

②:多进行对函数调用的联系,以便熟练掌握。

(2):

点线形系列4-四边形题目说明.pdf
用户输入一组选项和数据,进行与四边形有关的计算。
以下四边形顶点的坐标要求按顺序依次输入,连续输入的两个顶点是相邻顶点,第一个和最后一个输入的顶点相邻。
选项包括:
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"。

输入样例1:

选项1,点重合。例如:

1:-1,-1 -1,-1 1,2 1,-2
 

输出样例:

在这里给出相应的输出。例如:

points coincide
 

输入样例2:

不符合基本格式。例如:

1:-1,-1 1,2 -1,1 ++1,0
 

输出样例:

在这里给出相应的输出。例如:

Wrong Format
 

输入样例3:

选项1,输入点数量不对。例如:

1:-1,-1 -1,2 
 

输出样例:

在这里给出相应的输出。例如:

wrong number of points
 

输入样例4:

选项1,正确输入判断。例如:

1:-1,-1 -1,1 1,2 1,-2
 

输出样例:

在这里给出相应的输出。例如:

true false
 

输入样例5:

选项2,输入点不构成四边形。例如:

2:10,10 1,1 0,0 1,20
 

输出样例:

在这里给出相应的输出。例如:

not a quadrilateral
 

输入样例6:

选项2,正方形。例如:

2:0,0 0,80 80,80 80,0
 

输出样例:

在这里给出相应的输出。例如:

true true true
 

输入样例7:

选项2。例如:

2:0,0 -10,80 0,160 -10,80
 

输出样例:

在这里给出相应的输出。例如:

not a quadrilateral
 

输入样例8:

选项3,凸四边形。例如:

3:-1,-1 -1,1 1,2 1,-2
 

输出样例:

在这里给出相应的输出。例如:

true 10.472 6.0
 

输入样例9:

选项3,。例如:

3:0,0 -10,100 0,99 10,100
 

输出样例:

在这里给出相应的输出。例如:

false 221.097 990.0
相关代码:
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        String a=in.nextLine();
        int temp1=0;
        char []b=a.toCharArray();
        for(int i=0;i<b.length;i++)
        {
        	if(b[i]==':')
        		temp1++;
        }
        //System.out.println(temp1);
        if(temp1!=1)
        	System.out.println("Wrong Format");
        else {
        //System.out.println(b[0]);
        if(b[0]=='1')
        	{
        		int flag1=1;
        		String[] sd1=null;
        		String[] sd2=null;
        		String[] f=a.split(":");
        		String[] o=f[1].split("\\s"); 
        		if(o.length!=2)
        			System.out.println("wrong number of points");
        		else
        		{
        			for(int i=0;i<o.length;i++)
        			{
        				if(i==0)
        				{
        					sd1=o[i].split(",");
        					char[] sz1=o[i].toCharArray();
                			if(sz1[0]=='+'&&sz1[1]=='+'||sz1[0]=='-'&&sz1[1]=='-'||sz1[0]=='+'&&sz1[1]=='-'||sz1[0]=='-'&&sz1[1]=='+')
                				flag1=0;
        				}
        				if(i==1)
        				{
        					sd2=o[i].split(",");
        					char[] sz2=o[i].toCharArray();
                			if(sz2[0]=='+'&&sz2[1]=='+'||sz2[0]=='-'&&sz2[1]=='-'||sz2[0]=='+'&&sz2[1]=='-'||sz2[0]=='-'&&sz2[1]=='+')
                				flag1=0;
        				}
        			}
        			if(flag1==0)
        				System.out.println("Wrong Format");
        			else
        			{
        				double x1=Double.parseDouble(sd1[0]);
        				double y1=Double.parseDouble(sd1[1]);
        				double x2=Double.parseDouble(sd2[0]);
        				double y2=Double.parseDouble(sd2[1]);
        				double k=(y2-y1)/(x2-x1);
        				if(x1==x2&&y1==y2)
        					System.out.println("points coincide");
        				else if(x1==x2)
        					System.out.println("Slope does not exist");
        				else
        					System.out.println(k);
        			}
        		}
        	}
        if(b[0]=='2')
        {
    		int flag1=1;
    		String[] sd1=null;
    		String[] sd2=null;
    		String[] sd3=null;
    		String[] f=a.split(":");
    		String[] o=f[1].split("\\s"); 
    		if(o.length!=3)
    			System.out.println("wrong number of points");
    		else
    		{
    			for(int i=0;i<o.length;i++)
    			{
    				if(i==0)
    				{
    					sd1=o[i].split(",");
    					char[] sz1=o[i].toCharArray();
            			if(sz1[0]=='+'&&sz1[1]=='+'||sz1[0]=='-'&&sz1[1]=='-'||sz1[0]=='+'&&sz1[1]=='-'||sz1[0]=='-'&&sz1[1]=='+')
            				flag1=0;
    				}
    				if(i==1)
    				{
    					sd2=o[i].split(",");
    					char[] sz2=o[i].toCharArray();
            			if(sz2[0]=='+'&&sz2[1]=='+'||sz2[0]=='-'&&sz2[1]=='-'||sz2[0]=='+'&&sz2[1]=='-'||sz2[0]=='-'&&sz2[1]=='+')
            				flag1=0;
    				}
    				if(i==2)
    				{
    					sd3=o[i].split(",");
    					char[] sz3=o[i].toCharArray();
            			if(sz3[0]=='+'&&sz3[1]=='+'||sz3[0]=='-'&&sz3[1]=='-'||sz3[0]=='+'&&sz3[1]=='-'||sz3[0]=='-'&&sz3[1]=='+')
            				flag1=0;
    				}
    			}
    			if(flag1==0)
    				System.out.println("Wrong Format");
    			else
    			{
    				double x1=Double.parseDouble(sd1[0]);
    				double y1=Double.parseDouble(sd1[1]);
    				double x2=Double.parseDouble(sd2[0]);
    				double y2=Double.parseDouble(sd2[1]);
    				double x3=Double.parseDouble(sd3[0]);
    				double y3=Double.parseDouble(sd3[1]);
    				if(x1==x2&&y1==y2||x1==x3&&y1==y3||x2==x3&&y2==y3)
    					System.out.println("points coincide");
    				else 
    				{
    					double k=(y3-y2)/(x3-x2);
    					double m=y2-((y3-y2)/(x3-x2))*x2;
    					double jl1=Math.abs(k*x1-y1+m);
    					double jl2=Math.sqrt(k*k+1);
    					double jl=jl1/jl2;
    					System.out.println(jl);
    				}
    			}
    		}
        }
        if(b[0]=='3')
        {
    		int flag1=1;
    		String[] sd1=null;
    		String[] sd2=null;
    		String[] sd3=null;
    		String[] f=a.split(":");
    		String[] o=f[1].split("\\s"); 
    		if(o.length!=3)
    			System.out.println("wrong number of points");
    		else
    		{
    			for(int i=0;i<o.length;i++)
    			{
    				if(i==0)
    				{
    					sd1=o[i].split(",");
    					char[] sz1=o[i].toCharArray();
            			if(sz1[0]=='+'&&sz1[1]=='+'||sz1[0]=='-'&&sz1[1]=='-'||sz1[0]=='+'&&sz1[1]=='-'||sz1[0]=='-'&&sz1[1]=='+')
            				flag1=0;
    				}
    				if(i==1)
    				{
    					sd2=o[i].split(",");
    					char[] sz2=o[i].toCharArray();
            			if(sz2[0]=='+'&&sz2[1]=='+'||sz2[0]=='-'&&sz2[1]=='-'||sz2[0]=='+'&&sz2[1]=='-'||sz2[0]=='-'&&sz2[1]=='+')
            				flag1=0;
    				}
    				if(i==2)
    				{
    					sd3=o[i].split(",");
    					char[] sz3=o[i].toCharArray();
            			if(sz3[0]=='+'&&sz3[1]=='+'||sz3[0]=='-'&&sz3[1]=='-'||sz3[0]=='+'&&sz3[1]=='-'||sz3[0]=='-'&&sz3[1]=='+')
            				flag1=0;
    				}
    			}
    			if(flag1==0)
    				System.out.println("Wrong Format");
    			else
    			{
    				double x1=Double.parseDouble(sd1[0]);
    				double y1=Double.parseDouble(sd1[1]);
    				double x2=Double.parseDouble(sd2[0]);
    				double y2=Double.parseDouble(sd2[1]);
    				double x3=Double.parseDouble(sd3[0]);
    				double y3=Double.parseDouble(sd3[1]);
    				double k1=0,k2=0,k3=0;
    				k1=(y2-y1)/(x2-x1);
    				k2=(y3-y1)/(x3-x1);
    				k3=(y3-y2)/(x3-x2);
    				if(k1==k2&&k1==k3&&k2==k3)
    					System.out.println("true");
    				else
    					System.out.println("false");
    			}
    		}
        }
        if(b[0]=='5')
        {
    		int flag1=1;
    		String[] sd1=null;
    		String[] sd2=null;
    		String[] sd3=null;
    		String[] sd4=null;
    		String[] f=a.split(":");
    		String[] o=f[1].split("\\s"); 
    		if(o.length!=4)
    			System.out.println("wrong number of points");
    		else
    		{
    			for(int i=0;i<o.length;i++)
    			{
    				if(i==0)
    				{
    					sd1=o[i].split(",");
    					char[] sz1=o[i].toCharArray();
            			if(sz1[0]=='+'&&sz1[1]=='+'||sz1[0]=='-'&&sz1[1]=='-'||sz1[0]=='+'&&sz1[1]=='-'||sz1[0]=='-'&&sz1[1]=='+')
            				flag1=0;
    				}
    				if(i==1)
    				{
    					sd2=o[i].split(",");
    					char[] sz2=o[i].toCharArray();
            			if(sz2[0]=='+'&&sz2[1]=='+'||sz2[0]=='-'&&sz2[1]=='-'||sz2[0]=='+'&&sz2[1]=='-'||sz2[0]=='-'&&sz2[1]=='+')
            				flag1=0;
    				}
    				if(i==2)
    				{
    					sd3=o[i].split(",");
    					char[] sz3=o[i].toCharArray();
            			if(sz3[0]=='+'&&sz3[1]=='+'||sz3[0]=='-'&&sz3[1]=='-'||sz3[0]=='+'&&sz3[1]=='-'||sz3[0]=='-'&&sz3[1]=='+')
            				flag1=0;
    				}
    				if(i==3)
    				{
    					sd4=o[i].split(",");
    					char[] sz4=o[i].toCharArray();
            			if(sz4[0]=='+'&&sz4[1]=='+'||sz4[0]=='-'&&sz4[1]=='-'||sz4[0]=='+'&&sz4[1]=='-'||sz4[0]=='-'&&sz4[1]=='+')
            				flag1=0;
    				}
    			}
    			if(flag1==0)
    				System.out.println("Wrong Format");
    			else
    			{
    				double x1=Double.parseDouble(sd1[0]);
    				double y1=Double.parseDouble(sd1[1]);
    				double x2=Double.parseDouble(sd2[0]);
    				double y2=Double.parseDouble(sd2[1]);
    				double x3=Double.parseDouble(sd3[0]);
    				double y3=Double.parseDouble(sd3[1]);
    				double x4=Double.parseDouble(sd4[0]);
    				double y4=Double.parseDouble(sd4[1]);
    				double k1=(y2-y1)/(x2-x1);
    				double k2=(y4-y3)/(x4-x3);
    				if(k1==k2)
    					System.out.println("is parallel lines,have no intersection point");
    				else {
    				double b1=y1-k1*x1;
    				double b2=y4-k2*x4;
    				double x0=(b2-b1)/(k1-k2);
    				double y0=k1*x0+b1;
    				System.out.print(x0+","+y0);
    				double maxx1=0,maxx2=0,maxy1=0,maxy2=0,minx1=0,minx2=0,miny1=0,miny2=0;
    				if(x1>x2) {
    					maxx1=x1;
    					minx1=x2;
    				}
    				else {
    					maxx1=x2;
    					minx1=x1;
    				}
    				if(x3>x4)
    				{
    					maxx2=x3;
    					minx2=x4;
    				}
    				else {
    					maxx2=x4;
    					minx2=x3;
    				}
    				if(y1>y2) {
    					maxy1=y1;
    					miny1=y2;
    				}
    				else {
    					maxy1=y2;
    					miny1=y1;
    				}
    				if(y3>y4) {
    					maxy2=y3;
    					miny2=y4;
    				}
    				else {
    					maxy2=y4;
    					miny2=y3;
    				}
    				if(x0>minx1&&x0<maxx1&&y0>miny1&&y0<maxy1||x0>minx2&&x0<maxx2&&y0>miny2&&y0<maxy2)
    					System.out.println(" true");
    				else
    					System.out.println(" false");
    				}
    			}
    		}
        }
        if(b[0]=='4')
        {
    		int flag1=1;
    		String[] sd1=null;
    		String[] sd2=null;
    		String[] sd3=null;
    		String[] sd4=null;
    		String[] f=a.split(":");
    		String[] o=f[1].split("\\s"); 
    		if(o.length!=4)
    			System.out.println("wrong number of points");
    		else
    		{
    			for(int i=0;i<o.length;i++)
    			{
    				if(i==0)
    				{
    					sd1=o[i].split(",");
    					char[] sz1=o[i].toCharArray();
            			if(sz1[0]=='+'&&sz1[1]=='+'||sz1[0]=='-'&&sz1[1]=='-'||sz1[0]=='+'&&sz1[1]=='-'||sz1[0]=='-'&&sz1[1]=='+')
            				flag1=0;
    				}
    				if(i==1)
    				{
    					sd2=o[i].split(",");
    					char[] sz2=o[i].toCharArray();
            			if(sz2[0]=='+'&&sz2[1]=='+'||sz2[0]=='-'&&sz2[1]=='-'||sz2[0]=='+'&&sz2[1]=='-'||sz2[0]=='-'&&sz2[1]=='+')
            				flag1=0;
    				}
    				if(i==2)
    				{
    					sd3=o[i].split(",");
    					char[] sz3=o[i].toCharArray();
            			if(sz3[0]=='+'&&sz3[1]=='+'||sz3[0]=='-'&&sz3[1]=='-'||sz3[0]=='+'&&sz3[1]=='-'||sz3[0]=='-'&&sz3[1]=='+')
            				flag1=0;
    				}
    				if(i==3)
    				{
    					sd4=o[i].split(",");
    					char[] sz4=o[i].toCharArray();
            			if(sz4[0]=='+'&&sz4[1]=='+'||sz4[0]=='-'&&sz4[1]=='-'||sz4[0]=='+'&&sz4[1]=='-'||sz4[0]=='-'&&sz4[1]=='+')
            				flag1=0;
    				}
    			}
    			if(flag1==0)
    				System.out.println("Wrong Format");
    			else
    			{
    				double x1=Double.parseDouble(sd1[0]);
    				double y1=Double.parseDouble(sd1[1]);
    				double x2=Double.parseDouble(sd2[0]);
    				double y2=Double.parseDouble(sd2[1]);
    				double x3=Double.parseDouble(sd3[0]);
    				double y3=Double.parseDouble(sd3[1]);
    				double x4=Double.parseDouble(sd4[0]);
    				double y4=Double.parseDouble(sd4[1]);
    				double k1=(y2-y1)/(x2-x1);
    				double k2=(y4-y3)/(x4-x3);
    				if(k1==k2)
    					System.out.println("true");
    				else
    					System.out.println("false");
    			}
    		}
        }
        }
}
}

  踩坑心得:

 

  踩坑心得:

    ①:题目条件有很多,导致条理十分紊乱,后经过多次调试得到了解决。

②:对条件的把握还没有到位,导致许多功能无法实现,后经过多次的调试也得到了解决。

③:对于字符串的输入与输出,类型的转换还没有熟练掌握,导致输出的错误实例老是错误,在通过我的不懈调试下得到了解决。

④:出现过数组越界的问题,后通过对数组的存储方式进行变换后得到了解决。

 (3)

要求:

用户输入一组选项和数据,进行与三角形有关的计算。选项包括:
1:输入三个点坐标,判断是否是等腰三角形、等边三角形,判断结果输出true/false,两个结果之间以一个英文空格符分隔。
2:输入三个点坐标,输出周长、面积、重心坐标,三个参数之间以一个英文空格分隔,坐标之间以英文","分隔。
3:输入三个点坐标,输出是钝角、直角还是锐角三角形,依次输出三个判断结果(true/false),以一个英文空格分隔,
4:输入五个点坐标,输出前两个点所在的直线与三个点所构成的三角形相交的交点数量,如果交点有两个,则按面积大小依次输出三角形被直线分割成两部分的面积。若直线与三角形一条线重合,输出"The point is on the edge of the triangle"
5:输入四个点坐标,输出第一个是否在后三个点所构成的三角形的内部(输出in the triangle/outof triangle)。
必须使用射线法,原理:由第一个点往任一方向做一射线,射线与三角形的边的交点(不含点本身)数量如果为1,则在三角形内部。如果交点有两个或0个,则在三角形之外。若点在三角形的某条边上,输出"on the triangle"

输入格式:

基本格式:选项+":"+坐标x+","+坐标y+" "+坐标x+","+坐标y。点的x、y坐标之间以英文","分隔,点与点之间以一个英文空格分隔。

输出格式:

基本输出格式见每种选项的描述。
异常情况输出:
如果不符合基本格式,输出"Wrong Format"。
如果符合基本格式,但输入点的数量不符合要求,输出"wrong number of points"。
如果输入的三个点无法构成三角形,输出"data error"。
注意:输出的数据若小数点后超过6位,只保留小数点后6位,多余部分采用四舍五入规则进到最低位。小数点后若不足6位,按原始位数显示,不必补齐。例如:1/3的结果按格式输出为 0.333333,1.0按格式输出为1.0

选项4中所输入线的两个点坐标重合,输出"points coincide",

输入样例1:

选项4,定义线的两点重合。例如:

4:1,0 1,0 0,0 2,0 4,0
 

输出样例:

在这里给出相应的输出。例如:

points coincide
 

输入样例2:

选项4,构成三角形的三个点在一条线上,无法构成三角形。例如:

4:1,0 0,2 0,0 0,0 4,0
 

输出样例:

在这里给出相应的输出。例如:

data error
 

输入样例3:

选项1,判断等腰、等边三角形。例如:

1:-2,0 2,0 0,4
 

输出样例:

两个判断结果。例如:

true false
 

输入样例4:

选项2,输出边长、面积、重心坐标。例如:

2:0,0 3,0 0,1
 

输出样例:

在这里给出相应的输出。例如:

7.162278 1.5 1.0,0.333333
 

输入样例5:

选项3,钝角、直角、锐角的判断。例如:

3:0,1 1,0 2,0
 

输出样例:

在这里给出相应的输出。例如:

true false false
 

输入样例6:

选项4,直线与三角形交点的数量等于2,输出数量值以及三角形被分割的两部分面积。例如:

4:1,0 0,2 0,0 0,2 4,0
 

输出样例:

在这里给出相应的输出。例如:

2 1.0 3.0
 

输入样例7:

选项4,直线与三角形交点的数量少于两个,只输出数量值。例如:

4:-1,0 1,2 0,1 0,-1 2,0
 

输出样例:

在这里给出相应的输出。例如:

1
 

输入样例8:

选项5,用射线法判断点是否在三角形内部。例如:

5:0.5,0.5 0,0 0,2 4,0
 

输出样例:

在这里给出相应的输出,交点坐标之间以英文","分隔,判断结果与坐标之间以一个英文空格分隔。例如:

in the triangle
 

输入样例9:

选项5,用射线法判断点是否在三角形内部。例如:

5:0,0 -1,-1 2,3 3,4
 

输出样例:

在这里给出相应的输出。例如:

outof the triangle

 代码:

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        String a=in.nextLine();
        int temp1=0;
        char []b=a.toCharArray();
        for(int i=0;i<b.length;i++)
        {
        	if(b[i]==':')
        		temp1++;
        }
        //System.out.println(temp1);
        if(temp1!=1)
        	System.out.println("Wrong Format");
        else {
        //System.out.println(b[0]);
        if(b[0]=='1')
        	{
        		int flag1=1;
        		String[] sd1=null;
        		String[] sd2=null;
        		String[] f=a.split(":");
        		String[] o=f[1].split("\\s"); 
        		if(o.length!=2)
        			System.out.println("wrong number of points");
        		else
        		{
        			for(int i=0;i<o.length;i++)
        			{
        				if(i==0)
        				{
        					sd1=o[i].split(",");
        					char[] sz1=o[i].toCharArray();
                			if(sz1[0]=='+'&&sz1[1]=='+'||sz1[0]=='-'&&sz1[1]=='-'||sz1[0]=='+'&&sz1[1]=='-'||sz1[0]=='-'&&sz1[1]=='+')
                				flag1=0;
        				}
        				if(i==1)
        				{
        					sd2=o[i].split(",");
        					char[] sz2=o[i].toCharArray();
                			if(sz2[0]=='+'&&sz2[1]=='+'||sz2[0]=='-'&&sz2[1]=='-'||sz2[0]=='+'&&sz2[1]=='-'||sz2[0]=='-'&&sz2[1]=='+')
                				flag1=0;
        				}
        			}
        			if(flag1==0)
        				System.out.println("Wrong Format");
        			else
        			{
        				double x1=Double.parseDouble(sd1[0]);
        				double y1=Double.parseDouble(sd1[1]);
        				double x2=Double.parseDouble(sd2[0]);
        				double y2=Double.parseDouble(sd2[1]);
        				double k=(y2-y1)/(x2-x1);
        				if(x1==x2&&y1==y2)
        					System.out.println("points coincide");
        				else if(x1==x2)
        					System.out.println("Slope does not exist");
        				else
        					System.out.println(k);
        			}
        		}
        	}
        if(b[0]=='2')
        {
    		int flag1=1;
    		String[] sd1=null;
    		String[] sd2=null;
    		String[] sd3=null;
    		String[] f=a.split(":");
    		String[] o=f[1].split("\\s"); 
    		if(o.length!=3)
    			System.out.println("wrong number of points");
    		else
    		{
    			for(int i=0;i<o.length;i++)
    			{
    				if(i==0)
    				{
    					sd1=o[i].split(",");
    					char[] sz1=o[i].toCharArray();
            			if(sz1[0]=='+'&&sz1[1]=='+'||sz1[0]=='-'&&sz1[1]=='-'||sz1[0]=='+'&&sz1[1]=='-'||sz1[0]=='-'&&sz1[1]=='+')
            				flag1=0;
    				}
    				if(i==1)
    				{
    					sd2=o[i].split(",");
    					char[] sz2=o[i].toCharArray();
            			if(sz2[0]=='+'&&sz2[1]=='+'||sz2[0]=='-'&&sz2[1]=='-'||sz2[0]=='+'&&sz2[1]=='-'||sz2[0]=='-'&&sz2[1]=='+')
            				flag1=0;
    				}
    				if(i==2)
    				{
    					sd3=o[i].split(",");
    					char[] sz3=o[i].toCharArray();
            			if(sz3[0]=='+'&&sz3[1]=='+'||sz3[0]=='-'&&sz3[1]=='-'||sz3[0]=='+'&&sz3[1]=='-'||sz3[0]=='-'&&sz3[1]=='+')
            				flag1=0;
    				}
    			}
    			if(flag1==0)
    				System.out.println("Wrong Format");
    			else
    			{
    				double x1=Double.parseDouble(sd1[0]);
    				double y1=Double.parseDouble(sd1[1]);
    				double x2=Double.parseDouble(sd2[0]);
    				double y2=Double.parseDouble(sd2[1]);
    				double x3=Double.parseDouble(sd3[0]);
    				double y3=Double.parseDouble(sd3[1]);
    				if(x1==x2&&y1==y2||x1==x3&&y1==y3||x2==x3&&y2==y3)
    					System.out.println("points coincide");
    				else 
    				{
    					double k=(y3-y2)/(x3-x2);
    					double m=y2-((y3-y2)/(x3-x2))*x2;
    					double jl1=Math.abs(k*x1-y1+m);
    					double jl2=Math.sqrt(k*k+1);
    					double jl=jl1/jl2;
    					System.out.println(jl);
    				}
    			}
    		}
        }
        if(b[0]=='3')
        {
    		int flag1=1;
    		String[] sd1=null;
    		String[] sd2=null;
    		String[] sd3=null;
    		String[] f=a.split(":");
    		String[] o=f[1].split("\\s"); 
    		if(o.length!=3)
    			System.out.println("wrong number of points");
    		else
    		{
    			for(int i=0;i<o.length;i++)
    			{
    				if(i==0)
    				{
    					sd1=o[i].split(",");
    					char[] sz1=o[i].toCharArray();
            			if(sz1[0]=='+'&&sz1[1]=='+'||sz1[0]=='-'&&sz1[1]=='-'||sz1[0]=='+'&&sz1[1]=='-'||sz1[0]=='-'&&sz1[1]=='+')
            				flag1=0;
    				}
    				if(i==1)
    				{
    					sd2=o[i].split(",");
    					char[] sz2=o[i].toCharArray();
            			if(sz2[0]=='+'&&sz2[1]=='+'||sz2[0]=='-'&&sz2[1]=='-'||sz2[0]=='+'&&sz2[1]=='-'||sz2[0]=='-'&&sz2[1]=='+')
            				flag1=0;
    				}
    				if(i==2)
    				{
    					sd3=o[i].split(",");
    					char[] sz3=o[i].toCharArray();
            			if(sz3[0]=='+'&&sz3[1]=='+'||sz3[0]=='-'&&sz3[1]=='-'||sz3[0]=='+'&&sz3[1]=='-'||sz3[0]=='-'&&sz3[1]=='+')
            				flag1=0;
    				}
    			}
    			if(flag1==0)
    				System.out.println("Wrong Format");
    			else
    			{
    				double x1=Double.parseDouble(sd1[0]);
    				double y1=Double.parseDouble(sd1[1]);
    				double x2=Double.parseDouble(sd2[0]);
    				double y2=Double.parseDouble(sd2[1]);
    				double x3=Double.parseDouble(sd3[0]);
    				double y3=Double.parseDouble(sd3[1]);
    				double k1=0,k2=0,k3=0;
    				k1=(y2-y1)/(x2-x1);
    				k2=(y3-y1)/(x3-x1);
    				k3=(y3-y2)/(x3-x2);
    				if(k1==k2&&k1==k3&&k2==k3)
    					System.out.println("true");
    				else
    					System.out.println("false");
    			}
    		}
        }
        if(b[0]=='5')
        {
    		int flag1=1;
    		String[] sd1=null;
    		String[] sd2=null;
    		String[] sd3=null;
    		String[] sd4=null;
    		String[] f=a.split(":");
    		String[] o=f[1].split("\\s"); 
    		if(o.length!=4)
    			System.out.println("wrong number of points");
    		else
    		{
    			for(int i=0;i<o.length;i++)
    			{
    				if(i==0)
    				{
    					sd1=o[i].split(",");
    					char[] sz1=o[i].toCharArray();
            			if(sz1[0]=='+'&&sz1[1]=='+'||sz1[0]=='-'&&sz1[1]=='-'||sz1[0]=='+'&&sz1[1]=='-'||sz1[0]=='-'&&sz1[1]=='+')
            				flag1=0;
    				}
    				if(i==1)
    				{
    					sd2=o[i].split(",");
    					char[] sz2=o[i].toCharArray();
            			if(sz2[0]=='+'&&sz2[1]=='+'||sz2[0]=='-'&&sz2[1]=='-'||sz2[0]=='+'&&sz2[1]=='-'||sz2[0]=='-'&&sz2[1]=='+')
            				flag1=0;
    				}
    				if(i==2)
    				{
    					sd3=o[i].split(",");
    					char[] sz3=o[i].toCharArray();
            			if(sz3[0]=='+'&&sz3[1]=='+'||sz3[0]=='-'&&sz3[1]=='-'||sz3[0]=='+'&&sz3[1]=='-'||sz3[0]=='-'&&sz3[1]=='+')
            				flag1=0;
    				}
    				if(i==3)
    				{
    					sd4=o[i].split(",");
    					char[] sz4=o[i].toCharArray();
            			if(sz4[0]=='+'&&sz4[1]=='+'||sz4[0]=='-'&&sz4[1]=='-'||sz4[0]=='+'&&sz4[1]=='-'||sz4[0]=='-'&&sz4[1]=='+')
            				flag1=0;
    				}
    			}
    			if(flag1==0)
    				System.out.println("Wrong Format");
    			else
    			{
    				double x1=Double.parseDouble(sd1[0]);
    				double y1=Double.parseDouble(sd1[1]);
    				double x2=Double.parseDouble(sd2[0]);
    				double y2=Double.parseDouble(sd2[1]);
    				double x3=Double.parseDouble(sd3[0]);
    				double y3=Double.parseDouble(sd3[1]);
    				double x4=Double.parseDouble(sd4[0]);
    				double y4=Double.parseDouble(sd4[1]);
    				double k1=(y2-y1)/(x2-x1);
    				double k2=(y4-y3)/(x4-x3);
    				if(k1==k2)
    					System.out.println("is parallel lines,have no intersection point");
    				else {
    				double b1=y1-k1*x1;
    				double b2=y4-k2*x4;
    				double x0=(b2-b1)/(k1-k2);
    				double y0=k1*x0+b1;
    				System.out.print(x0+","+y0);
    				double maxx1=0,maxx2=0,maxy1=0,maxy2=0,minx1=0,minx2=0,miny1=0,miny2=0;
    				if(x1>x2) {
    					maxx1=x1;
    					minx1=x2;
    				}
    				else {
    					maxx1=x2;
    					minx1=x1;
    				}
    				if(x3>x4)
    				{
    					maxx2=x3;
    					minx2=x4;
    				}
    				else {
    					maxx2=x4;
    					minx2=x3;
    				}
    				if(y1>y2) {
    					maxy1=y1;
    					miny1=y2;
    				}
    				else {
    					maxy1=y2;
    					miny1=y1;
    				}
    				if(y3>y4) {
    					maxy2=y3;
    					miny2=y4;
    				}
    				else {
    					maxy2=y4;
    					miny2=y3;
    				}
    				if(x0>minx1&&x0<maxx1&&y0>miny1&&y0<maxy1||x0>minx2&&x0<maxx2&&y0>miny2&&y0<maxy2)
    					System.out.println(" true");
    				else
    					System.out.println(" false");
    				}
    			}
    		}
        }
        if(b[0]=='4')
        {
    		int flag1=1;
    		String[] sd1=null;
    		String[] sd2=null;
    		String[] sd3=null;
    		String[] sd4=null;
    		String[] f=a.split(":");
    		String[] o=f[1].split("\\s"); 
    		if(o.length!=4)
    			System.out.println("wrong number of points");
    		else
    		{
    			for(int i=0;i<o.length;i++)
    			{
    				if(i==0)
    				{
    					sd1=o[i].split(",");
    					char[] sz1=o[i].toCharArray();
            			if(sz1[0]=='+'&&sz1[1]=='+'||sz1[0]=='-'&&sz1[1]=='-'||sz1[0]=='+'&&sz1[1]=='-'||sz1[0]=='-'&&sz1[1]=='+')
            				flag1=0;
    				}
    				if(i==1)
    				{
    					sd2=o[i].split(",");
    					char[] sz2=o[i].toCharArray();
            			if(sz2[0]=='+'&&sz2[1]=='+'||sz2[0]=='-'&&sz2[1]=='-'||sz2[0]=='+'&&sz2[1]=='-'||sz2[0]=='-'&&sz2[1]=='+')
            				flag1=0;
    				}
    				if(i==2)
    				{
    					sd3=o[i].split(",");
    					char[] sz3=o[i].toCharArray();
            			if(sz3[0]=='+'&&sz3[1]=='+'||sz3[0]=='-'&&sz3[1]=='-'||sz3[0]=='+'&&sz3[1]=='-'||sz3[0]=='-'&&sz3[1]=='+')
            				flag1=0;
    				}
    				if(i==3)
    				{
    					sd4=o[i].split(",");
    					char[] sz4=o[i].toCharArray();
            			if(sz4[0]=='+'&&sz4[1]=='+'||sz4[0]=='-'&&sz4[1]=='-'||sz4[0]=='+'&&sz4[1]=='-'||sz4[0]=='-'&&sz4[1]=='+')
            				flag1=0;
    				}
    			}
    			if(flag1==0)
    				System.out.println("Wrong Format");
    			else
    			{
    				double x1=Double.parseDouble(sd1[0]);
    				double y1=Double.parseDouble(sd1[1]);
    				double x2=Double.parseDouble(sd2[0]);
    				double y2=Double.parseDouble(sd2[1]);
    				double x3=Double.parseDouble(sd3[0]);
    				double y3=Double.parseDouble(sd3[1]);
    				double x4=Double.parseDouble(sd4[0]);
    				double y4=Double.parseDouble(sd4[1]);
    				double k1=(y2-y1)/(x2-x1);
    				double k2=(y4-y3)/(x4-x3);
    				if(k1==k2)
    					System.out.println("true");
    				else
    					System.out.println("false");
    			}
    		}
        }
        }
}
}

  踩坑心得:

①:对三角形的判断老是错误,后通过与数学的结合后得到了解决。

②:对数据的处理也并未熟练,使得三角形老是错误的输入与输出,后经过调试得到了解决。

③:对错误样例也没有细心梳理,使得许多错误输入得到的输出也是错误的。

④:出现过数组越界的问题,后通过对数组的存储方式进行变换后得到了解决

期中考试:

 

 (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)方法。

      设计类图如下图所示。
    
     

1641304523(1).jpg

** 题目要求:在主方法中定义一条线段对象,从键盘输入该线段的起点坐标与终点坐标以及颜色,然后调用该线段的display()方法进行输出。**

  • 以下情况为无效作业
    • 无法运行
    • 设计不符合所给类图要求
    • 未通过任何测试点测试
    • 判定为抄袭

输入格式:

分别输入线段的起点横坐标、纵坐标、终点的横坐标、纵坐标以及颜色,中间可用一个或多个空格、tab或者回车分隔。

输出格式:

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:长度值
 

输入样例1:

在这里给出一组输入。例如:

5
9.4
12.3
84
Red
 

输出样例1:

在这里给出相应的输出。例如:

The line's color is:Red
The line's begin point's Coordinate is:
(5.00,9.40)
The line's end point's Coordinate is:
(12.30,84.00)
The line's length is:74.96
 

输入样例2:

在这里给出一组输入。例如:

80.2356
352.12
24.5
100
Black
 

输出样例2:

在这里给出相应的输出。例如:

Wrong Format
代码:
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        double x1=0,y1=0,x2=0,y2=0;
        Point point1=new Point();
        Point point2=new Point();
        Line line=new Line();
        point1.getX(in.nextDouble());
        point1.getY(in.nextDouble());
        point2.getX(in.nextDouble());
        point2.getY(in.nextDouble());
        x1=point1.setX();
        y1=point1.setY();
        x2=point2.setX();
        y2=point2.setY();
        if(x1<=0||x1>200||y1<=0||y1>200||x2<=0||x2>200||y2<=0||y2>200)
            System.out.print("Wrong Format");
        else
        {
        line.getcolor(in.next());
        line.getpoint1(x1,y1);
        line.getpoint2(x2,y2);
        line.getDistance();
        line.display();
        }
        }
}
 class Point{
    private double x,y;
    public void getX(double x){
        this.x=x;
    }
    public double setX()
    {
        return this.x;
    }
    public void getY(double y){
        this.y=y;
    }
    public double setY()
    {
        return this.y;
    }
}
 class Line{
    private String color;
    private double point1x1,point1y1,point2x2,point2y2,distance;
    public void getcolor(String color){
        this.color=color;
    }
    public void getpoint1(double x1,double y1){
        this.point1x1=x1;
        this.point1y1=y1;
    }
    public void getpoint2(double x2,double y2){
        this.point2x2=x2;
        this.point2y2=y2;
    }
    public void getDistance()
    {
        double temp=0;
         temp=(this.point1x1-this.point2x2)*(this.point1x1-this.point2x2)
            +(this.point1y1-this.point2y2)*(this.point1y1-this.point2y2);
        this.distance=Math.sqrt(temp);
    }
    public void display()
    {
        System.out.println("The line's color is:"+this.color);
        System.out.printf("The line's begin point's Coordinate is:\n(%.2f,%.2f)\n",this.point1x1,this.point1y1);
        System.out.printf("The line's end point's Coordinate is:\n(%.2f,%.2f)\n",this.point2x2,this.point2y2);
        System.out.printf("The line's length is:%.2f",this.distance);
    }
}

  (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();
    
     
    类结构如下图所示。

1641340607(1).jpg

其中,所有数值均保留两位小数,建议可用String.format("%.2f", data)方法。

  • 以下情况为无效作业
    • 无法运行
    • 设计不符合所给类图要求
    • 未通过任何测试点测试
    • 判定为抄袭

输入格式:

分别输入线段的起点横坐标、纵坐标、终点的横坐标、纵坐标以及颜色,中间可用一个或多个空格、tab或者回车分隔。

输出格式:

(x1,y1)
(x2,y2)
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:长度值
The Plane's color is:颜色值
 

输入样例1:

在这里给出一组输入。例如:

5
9.4
12.3
84
Red
 

输出样例1:

在这里给出相应的输出。例如:

(5.00,9.40)
(12.30,84.00)
The line's color is:Red
The line's begin point's Coordinate is:
(5.00,9.40)
The line's end point's Coordinate is:
(12.30,84.00)
The line's length is:74.96
The Plane's color is:Red
 

输入样例2:

在这里给出一组输入。例如:

5
9.4
12.3
845
Black
 

输出样例2:

在这里给出相应的输出。例如:

Wrong Format
代码:
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        double x1=0,y1=0,x2=0,y2=0;
        String color;
        Point point1=new Point();
        Point point2=new Point();
        Line line=new Line();
        Element element=new Element();
        point1.getX(in.nextDouble());
        point1.getY(in.nextDouble());
        point2.getX(in.nextDouble());
        point2.getY(in.nextDouble());
        x1=point1.setX();
        y1=point1.setY();
        x2=point2.setX();
        y2=point2.setY();
        if(x1<=0||x1>200||y1<=0||y1>200||x2<=0||x2>200||y2<=0||y2>200)
            System.out.print("Wrong Format");
        else
        {
        point1.display();
        point2.display();
        line.getpoint1(x1,y1);
        line.getpoint2(x2,y2);
        color=line.getcolor(in.next());
        line.getDistance();
        line.display();
        element.display(color);
        }
        }
}
 class Point{
    private double x,y;
    public void getX(double x){
        this.x=x;
    }
    public double setX()
    {
        return this.x;
    }
    public void getY(double y){
        this.y=y;
    }
    public double setY()
    {
        return this.y;
    }
     public void display(){
         System.out.printf("(%.2f,%.2f)\n",this.x,this.y);
     }
}
 class Line{
    private String color;
    private double point1x1,point1y1,point2x2,point2y2,distance;
    public void getpoint1(double x1,double y1){
        this.point1x1=x1;
        this.point1y1=y1;
    }
     public String getcolor(String color)
     {
         this.color=color;
         return this.color;
     }
    public void getpoint2(double x2,double y2){
        this.point2x2=x2;
        this.point2y2=y2;
    }
    public void getDistance()
    {
        double temp=0;
         temp=(this.point1x1-this.point2x2)*(this.point1x1-this.point2x2)
            +(this.point1y1-this.point2y2)*(this.point1y1-this.point2y2);
        this.distance=Math.sqrt(temp);
    }
    public void display()
    {
        System.out.println("The line's color is:"+this.color);
        System.out.printf("The line's begin point's Coordinate is:\n(%.2f,%.2f)\n",this.point1x1,this.point1y1);
        System.out.printf("The line's end point's Coordinate is:\n(%.2f,%.2f)\n",this.point2x2,this.point2y2);
        System.out.printf("The line's length is:%.2f\n",this.distance);
    }
}
class Plane{
    private String color;
    public  String getcolor(String color)
    {
        this.color=color;
        return this.color;
    }
    public void display()
    {
        System.out.print("The Plane's color is:"+this.color);
    }
}
class Element{
    Plane plane=new Plane();
    public void display(String color)
    {
        plane.getcolor(color);
        plane.display();
    }
}

  (3)

要求:

在“点与线(继承与多态)”题目基础上,对题目的类设计进行重构,增加容器类保存点、线、面对象,并对该容器进行相应增、删、遍历操作。

  • 在原有类设计的基础上,增加一个GeometryObject容器类,其属性为ArrayList<Element>类型的对象(若不了解泛型,可以不使用<Element>)
  • 增加该类的add()方法及remove(int index)方法,其功能分别为向容器中增加对象及删除第index - 1(ArrayList中index>=0)个对象
  • 在主方法中,用户循环输入要进行的操作(choice∈[0,4]),其含义如下:
    • 1:向容器中增加Point对象
    • 2:向容器中增加Line对象
    • 3:向容器中增加Plane对象
    • 4:删除容器中第index - 1个数据,若index数据非法,则无视此操作
    • 0:输入结束
    示例代码如下:
       choice = input.nextInt();
        while(choice != 0) {
            switch(choice) {
            case 1://insert Point object into list 
              ...
                break;
            case 2://insert Line object into list
                ...
                break;
            case 3://insert Plane object into list
                ...
                break;
            case 4://delete index - 1 object from list
                int index = input.nextInt();
                ...
            }
            choice = input.nextInt();
        }
    
     
    输入结束后,按容器中的对象顺序分别调用每个对象的display()方法进行输出。
    类图如下所示:

classdiagram.jpg

  • 以下情况为无效作业
    • 无法运行
    • 设计不符合所给类图要求
    • 未通过任何测试点测试
    • 判定为抄袭

输入格式:

switch(choice) {
            case 1://insert Point object into list 
              输入“点”对象的x,y值
                break;
            case 2://insert Line object into list
                输入“线”对象两个端点的x,y值
                break;
            case 3://insert Plane object into list
                输入“面”对象的颜色值
                break;
            case 4://delete index - 1 object from list
                输入要删除的对象位置(从1开始)
                ...
            }
 

输出格式:

  • Point、Line、Plane的输出参考题目2
  • 删除对象时,若输入的index超出合法范围,程序自动忽略该操作

输入样例:

在这里给出一组输入。例如:

1
3.4
5.6
2
4.4
8.0
0.98
23.888
Red
3
Black
1
9.8
7.5
3
Green
4
3
0
 

输出样例:

在这里给出相应的输出。例如:

(3.40,5.60)
The line's color is:Red
The line's begin point's Coordinate is:
(4.40,8.00)
The line's end point's Coordinate is:
(0.98,23.89)
The line's length is:16.25
(9.80,7.50)
The Plane's color is:Green
代码:
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        double x1=0,y1=0,x2=0,y2=0;
        Point point1=new Point();
        Point point2=new Point();
        Line line=new Line();
        point1.getX(in.nextDouble());
        point1.getY(in.nextDouble());
        point2.getX(in.nextDouble());
        point2.getY(in.nextDouble());
        x1=point1.setX();
        y1=point1.setY();
        x2=point2.setX();
        y2=point2.setY();
        if(x1<=0||x1>200||y1<=0||y1>200||x2<=0||x2>200||y2<=0||y2>200)
            System.out.print("Wrong Format");
        else
        {
        line.getcolor(in.next());
        line.getpoint1(x1,y1);
        line.getpoint2(x2,y2);
        line.getDistance();
        line.display();
        }
        }
}
 class Point{
    private double x,y;
    public void getX(double x){
        this.x=x;
    }
    public double setX()
    {
        return this.x;
    }
    public void getY(double y){
        this.y=y;
    }
    public double setY()
    {
        return this.y;
    }
}
 class Line{
    private String color;
    private double point1x1,point1y1,point2x2,point2y2,distance;
    public void getcolor(String color){
        this.color=color;
    }
    public void getpoint1(double x1,double y1){
        this.point1x1=x1;
        this.point1y1=y1;
    }
    public void getpoint2(double x2,double y2){
        this.point2x2=x2;
        this.point2y2=y2;
    }
    public void getDistance()
    {
        double temp=0;
         temp=(this.point1x1-this.point2x2)*(this.point1x1-this.point2x2)
            +(this.point1y1-this.point2y2)*(this.point1y1-this.point2y2);
        this.distance=Math.sqrt(temp);
    }
    public void display()
    {
        System.out.println("The line's color is:"+this.color);
        System.out.printf("The line's begin point's Coordinate is:\n(%.2f,%.2f)\n",this.point1x1,this.point1y1);
        System.out.printf("The line's end point's Coordinate is:\n(%.2f,%.2f)\n",this.point2x2,this.point2y2);
        System.out.printf("The line's length is:%.2f",this.distance);
    }
}

  总结:

1、学到了什么:

①:可以根据需求分析来解决问题。

②:对我在前八章Java程序设计基础上进行了一定量的复习。

③:能通过类间关系来降低代码的耦合性。

④抽象类与堕胎方法的使用。

2、需要进一步改进的地方:

①:自主学习的能力,由于这门课程采用的是线上线下相结合的方式,通过老师指定

的方式或其他方式自学是很重要的。

②:编码时的调试能力,在pta作业的完成中,错误无可避免,但是要学会自己通过调

试来发现问题所在并解决它。

建议与意见:

无。

 

posted @ 2022-05-09 22:41  Gitors  阅读(77)  评论(0)    收藏  举报