第二次总结

作业总结

一、前言

    这次总共进行了三次作业,相比与之前第一次写题,虽然不像某些大佬一样,第二天就一百分(是谁在卷懂得都懂QAQ),但也不是最开始的看到题目只想祈祷James Gosling托梦告诉我答案了,在经过第一次作业的洗礼,现在大抵是知道了写题的步骤。先分析要求,在想所有的可能情况(上边界下边界等等),然后再来写代码,这和我之前的想法有点不同,之前看到题目直接撸起袖子开敲,先把大框架写好再来慢慢写方法,但其实这种方法是绝对错误的,先分析会让你后来写代码的时候事半功倍。

    这次出现了很多新的知识,“正则表达式”(计算机科学的一个概念。正则表达式通常被用来检索、替换那些符合某个模式(规则)的文本。正则表达式(Regular Expression)是一种文本模式,包括普通字符(例如,a 到 z 之间的字母)和特殊字符(称为"元字符")。正则表达式使用单个字符串来描述、匹配一系列匹配某个句法规则的字符串。),“继承与多态”(继承的本质是复用,也就是沿用父类的变量和作用域,并对其做出的扩展)。

    接下来对作业做具体分析。

二、简要分析

  题目集4

        7-1 点线形系列1-计算两点之间的距离

输入连个点的坐标,计算两点之间的距离

输入格式:

4个double类型的实数,两个点的x,y坐标,依次是x1、y1、x2、y2,两个点的坐标之间以空格分隔,每个点的x,y坐标以英文“,”分隔。例如:0,0 1,1或0.1,-0.3 +3.5,15.6。
若输入格式非法,输出"Wrong Format"。
若输入格式合法但坐标点的数量超过两个,输出“wrong number of points”。

输出格式:

计算所得的两点之间的距离。例如:1.4142135623730951

import java.util.Scanner;

public class Main {

    public static void main(String[] args) {
        // TODO 自动生成的方法存根
     Scanner input = new Scanner(System.in);
     String  arr = input.nextLine();
     String[] array=arr.split(",| ");
     double[] arr1 = new double [array.length];
     if(arr1.length!=4) {
         System.out.println("wrong number of points");
         return;
     }
     for(int j=0;j<6;j++) {
         if(arr.charAt(j)=='+'&&arr.charAt(j+1)=='+'||
            arr.charAt(j)=='0'&&arr.charAt(j+1)=='0'||
            arr.charAt(j)==','&&arr.charAt(j+1)==' '||
            arr.charAt(j)==','&&arr.charAt(j+1)=='-'||
            arr.charAt(j)=='-'&&arr.charAt(j+1)=='+'||
            arr.charAt(j)=='+'&&arr.charAt(j+1)=='-'||
            arr.charAt(j)=='-'&&arr.charAt(j+1)=='-'||
            arr.charAt(j)==' '&&arr.charAt(j+1)==' ') {
             System.out.print("Wrong Format");
             return;
         }
     }
         for(int i=0;i<array.length;i++){
             arr1[i] = Double.parseDouble(array[i]);
         }
        double x1 = arr1[0];
        double y1 = arr1[1];
        double x2 = arr1[2];
        double y2 = arr1[3];
        double strength=0;
         strength = Math.sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2));
         System.out.println(strength);
     }
    }

SourceMonitor:

 分析:本次题目集算是简单的一题将计算和测试分为俩类,最关键也是最复杂的就是“Wrong Format”的考虑,在经过N遍的试错试错再试错,终于是写出了完全的答案(不知道是不是单纯过了测试点。。。)

 7-2 点线形系列2-线的计算

用户输入一组选项和数据,进行与直线有关的计算。选项包括:
1:输入两点坐标,计算斜率,若线条垂直于X轴,输出"Slope does not exist"。
2:输入三个点坐标,输出第一个点与另外两点连线的垂直距离。
3:输入三个点坐标,判断三个点是否在一条线上,输出true或者false。
4:输入四个点坐标,判断前两个点所构成的直线与后两点构成的直线是否平行,输出true或者false.
5:输入四个点坐标,计算输出前两个点所构成的直线与后两点构成的直线的交点坐标,x、y坐标之间以英文分隔",",并输出交叉点是否在两条线段之内(不含四个端点)的判断结果(true/false),判断结果与坐标之间以一个英文空格分隔。若两条线平行,没有交叉点,则输出"is parallel lines,have no intersection point"。

输入格式:

基本格式:选项+":"+坐标x+","+坐标y+" "+坐标x+","+坐标y。
例如:1:0,0 1,1
如果不符合基本格式,输出"Wrong Format"。
如果符合基本格式,但输入点的数量不符合要求,输出"wrong number of points"。
不论哪个选项,如果格式、点数量都符合要求,但构成任一条线的两个点坐标重合,输出"points coincide",

输出格式:

见题目描述。

import java.util.Scanner;

public class Main {

    public static void main(String[] args) {
        // TODO 自动生成的方法存根
     Scanner input = new Scanner(System.in);
     String  arr = input.nextLine();
     String[] array=arr.split(":|,| ");
     double[] arr1 = new double [array.length];
     for(int i=0;i<array.length;i++){
         arr1[i] = Double.parseDouble(array[i]);
     }
     int a = 0;
     for(int i=0;i<arr.length();i++) {
         if(arr.charAt(i)==','){
             a++;
         }
     }
     if(arr.charAt(0)=='1'&&a!=2) {
         System.out.print("Wrong Format");return;
     }
     else if((arr.charAt(0)=='2'||arr.charAt(0)=='3')&&a!=3) {
         System.out.print("Wrong Format");return;
     }
     else if(arr.charAt(0)=='4'&&a!=4) {
         System.out.print("Wrong Format");return;
     }
     else if(arr.charAt(0)=='5'&&a!=4) {
         System.out.print("Wrong Format");return;
     }
     else if(arr.charAt(1)!=':'||arr.charAt(0)>'5') {
         System.out.print("Wrong Format");return;
     }
     if(arr1[0]== 1) {
         slope(arr1[1],arr1[2],arr1[3],arr1[4]);
     }
     else if(arr1[0]==2) {
         verticalDis(arr1[1],arr1[2],arr1[3],arr1[4],arr1[5],arr1[6]);
     }
     else if(arr1[0]==3) {
         isLine(arr1[1],arr1[2],arr1[3],arr1[4],arr1[5],arr1[6]);
     }
     else if(arr1[0]==4) {
         isParallel(arr1[1],arr1[2],arr1[3],arr1[4],arr1[5],arr1[6],arr1[7],arr1[8]);
     }
     else if(arr1[0]==5) {
         intersection(arr1[1],arr1[2],arr1[3],arr1[4],arr1[5],arr1[6],arr1[7],arr1[8]);
     }
    }
     public static void slope(double x1,double y1,double x2,double y2) {
         if((x1!=x2&&y1==y2)||(x1==x2&&y1!=y2))
             System.out.print("Slope does not exist");
         else if(x1==x2&&y1==y2)
             System.out.print("points coincide");
         else 
             System.out.print((y1-y2)/(x1-x2));
     }
    
     public static void verticalDis(double x1,double y1,double x2,double y2,double x3,double y3) {
         if(x1==x2&&y1==y2||x1==x3&&y1==y3)
             System.out.print("points coincide");
         else {
         double distance=0;
         distance=Math.abs((y3-y2)*x1+(x2-x3)*y1+x3*y2-y3*x2)/Math.sqrt(Math.pow(y3-y2, 2)+Math.pow(x3-x2,2));
         System.out.print(distance);
         }
     }
     public static void isLine(double x1,double y1,double x2,double y2,double x3,double y3) {
         if(x1==x2||x2==x3||x1==x3) {
             if(x1==x2&&x2==x3)
                 System.out.print("true");
             else
                 System.out.print("false");
         }
         else {
             if((y1-y2)/(x1-x2)==(y2-y3)/(x2-x3)) 
                 System.out.print("true");
                 else
                     System.out.print("false");
             
         }
     }
     public static void isParallel(double x1,double y1,double x2,double y2,double x3,double y3,double x4,double y4) {
         if((y1-y2)/(x1-x2)==(y3-y4)/(x3-x4))
             System.out.print("true");
         else
             System.out.print("false");
         
     }
     public static void intersection(double x1,double y1,double x2,double y2,double x3,double y3,double x4,double y4) {
         if((y1-y2)/(x1-x2)==(y3-y4)/(x3-x4)||x1==x2&&x3==x4) {
             System.out.print("is parallel lines,have no intersection point");
         }
         else {
             double x,y;
             if(x1==x2){
                 x=(float) x1;
                 y=(float) ((y3-y4)/(x3-x4))*x+(x3*y4-x4*y3)/(x3-x4);
                  if(x>x1&&x<x2||x>x3&&x<x4||y>y1&&y<y2||y>y3&&y<y4){
                 System.out.print(x+","+y+" true");}
                 else
                     System.out.print(x+","+y+" false");
             
         }
             else if(x3==x4){
                 x=x3;
                 y=((y1-y2)/(x1-x2))*x+(x1*y2-x2*y1)/(x1-x2);
                  if(x>x1&&x<x2||x>x3&&x<x4||y>y1&&y<y2||y>y3&&y<y4){
                 System.out.print(x+","+y+" true");}
                 else
                     System.out.print(x+","+y+" false");
             }
             else{
             x=(float) (((x3*y4-x4*y3)/(x3-x4))-((x1*y2-x2*y1)/(x1-x2)))/(((y1-y2)/(x1-x2))-((y3-y4)/(x3-x4)));
             y=(float) ((y3-y4)/(x3-x4))*x+(x3*y4-x4*y3)/(x3-x4);
             if(x>x1&&x<x2||x>x3&&x<x4||y>y1&&y<y2||y>y3&&y<y4){
                 System.out.print(x+","+y+" true");}
                 else
                     System.out.print(x+","+y+" false");
             }
         }
     }
}

SourceMonitor:

  分析:该题也是图形类,相比于第一题更为复杂,在不同的选项中,去执行不同的操作。在第一个方法中,用斜率不存在就可以,第三个方法判断是否在一条线中也是通过其他俩点的斜率相等考虑,在设计时必须考虑能够复用打的代码,图形类的题目大部分代码都是重复的,需要更改的只是方法还有输入要求和输出要求,所以在设计时要尽量低耦合。

  7-3 点线形系列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"。

import java.util.Scanner;

public class Main {

    public static void main(String[] args) {
        // TODO 自动生成的方法存根
     Scanner input = new Scanner(System.in);
     String  arr = input.nextLine();
     String[] array=arr.split(":|,| ");
     double[] arr1 = new double [array.length];
         if(a+b>c&&a+c>b&&b+c>a) {
     for(int i=0;i<array.length;i++){
         arr1[i] = Double.parseDouble(array[i]);
     }
     if(arr.charAt(1)!=':') {
         System.out.print("Wrong Format");return;
     }
     if(arr1[1]==arr1[3]&&arr1[2]==arr1[4]||arr1[3]==arr1[5]&&arr1[4]==arr1[6]||arr1[1]==arr1[5]&&arr1[2]==arr1[6]){
         System.out.print("points coincide");return;
     }
    
     if(arr1[0]== 1) {
         q1(arr1[1],arr1[2],arr1[3],arr1[4],arr1[5],arr1[6]);
     }
      if(arr1[0]==2) {
         q2(arr1[1],arr1[2],arr1[3],arr1[4],arr1[5],arr1[6]);
     }
      if(arr1[0]==3) {
         q3(arr1[1],arr1[2],arr1[3],arr1[4],arr1[5],arr1[6]);
     }
      if(arr1[0]==4) {
         q4(arr1[1],arr1[2],arr1[3],arr1[4],arr1[5],arr1[6],arr1[7],arr1[8],arr1[9],arr1[10]);
     }
      if(arr1[0]==5) {
         q5(arr1[1],arr1[2],arr1[3],arr1[4],arr1[5],arr1[6],arr1[7],arr1[8]);
     }
    }
     public static void q1(double x1,double y1,double x2,double y2,double x3,double y3) {
         double a=Math.sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2));
         double b=Math.sqrt((x1-x3)*(x1-x3)+(y1-y3)*(y1-y3));
         double c=Math.sqrt((x2-x3)*(x2-x3)+(y2-y3)*(y2-y3));
         if(a+b>c&&a+c>b&&b+c>a) {
             if(a==b||a==c||b==c) {
             System.out.print("true"+" ");
             if(a==b&&b==c)
                 System.out.print("true");
             else
                 System.out.print("false");
         }
         else 
             System.out.print("false"+" "+"false");
     }
     else System.out.print("date error");
}
     public static void q2(double x1,double y1,double x2,double y2,double x3,double y3) {
         double a=Math.sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2));
         double b=Math.sqrt((x1-x3)*(x1-x3)+(y1-y3)*(y1-y3));
         double c=Math.sqrt((x2-x3)*(x2-x3)+(y2-y3)*(y2-y3));
         if(a+b>c&&a+c>b&&b+c>a) {
             double m = a+b+c;
             if(m*1e6%10!=0) 
                 System.out.printf("%.6f ",m);
             else 
                 System.out.print(m+" ");
         double p=Math.abs(x1*y2+x2*y3+x3*y1-x1*y3-x2*y1-x3*y2);
         double s=p/2;
         if((s*1e6)%10!=0)
             System.out.printf("%0.6f ",s);
         else 
             System.out.print(s+" ");
         double x=(x1+x2+x3)/3.0;
         double y=(y1+y2+y3)/3.0;
         if((x*1e6)%10!=0)
             System.out.print(String.format("%.6f",x)+",");
         else
             System.out.print(x+" ");
         if((y*1e6)%10!=0)
             System.out.print(String.format("%.6f",y)+",");
         else
             System.out.print(y);
         }
         else System.out.print("data error");
     }
     public static void q3(double x1,double y1,double x2,double y2,double x3,double y3) {
         double a=Math.sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2));
         double b=Math.sqrt((x1-x3)*(x1-x3)+(y1-y3)*(y1-y3));
         double c=Math.sqrt((x2-x3)*(x2-x3)+(y2-y3)*(y2-y3));
         if(a+b>c&&a+c>b&&b+c>a) {
             if(a*a+b*b<c*c||a*a+c*c<b*b||b*b+c*c<a*a)
                 System.out.print("true"+" "+"false"+" "+"false");
             else if(a*a+b*b==c*c||a*a+c*c==b*b||b*b+c*c==a*a)
                 System.out.print("false"+" "+"true"+" "+"false");
             else 
                 System.out.print("false"+" "+"false"+" "+"true");
         }
         else 
             System.out.print("data error");
     }
     public static void q4(double x1,double y1,double x2,double y2,double x3,double y3,double x4,double y4,double x5,double y5) {
         double a=Math.sqrt((x3-x4)*(x3-x4)+(y3-y4)*(y3-y4));
         double b=Math.sqrt((x3-x5)*(x3-x5)+(y3-y5)*(y3-y5));
         double c=Math.sqrt((x4-x5)*(x4-x5)+(y4-y5)*(y4-y5));
         int count=0;
         if(a+b>c&&a+c>b&&b+c>a) {
             if(x1==x2&&y1==y2)
                 System.out.print("points coidcide");
             else 
             {if((y1-y2)/(x1-x2)<(y1-y3)/(x1-x3)&&(y1-y2)/(x1-x2)>(y1-y4)/(x1-x4)) {
                  System.out.print("2");
             }
                     else if(y1-y2)/(x1-x2)==(y1-y3)/(x1-x3)&&(y1-y2)/(x1-x2)==(y1-y4)/(x1-x4))
                         System.out.print("1");
         }
                 }
         else 
             System.out.print("data error");
     }
     public static void q5(double x1,double y1,double x2,double y2,double x3,double y3,double x4,double y4) {
         int count=0;
        if((y1-y2)/(x1-x2)==(y2-y3)/(x2-x3)||(y1-y2)/(x1-x2)==(y2-y4)/(x2-x4)||(y1-y3)/(x1-x3)==(y4-y3)/(x4-x3)){
            System.out.print("on the triangle");
        }
         else
         {
             if(x1>x2&&x1>x3&&x1>x4||y1<y2&&y1<y3&&y1<y4){
                 System.out.print("outof triangle");
             }
             else 
                 System.out.print("in the triangle");
         }
     }
    
}

SourceMonitor:

  分析:该题也是图形类,相比于第二题更为复杂,在不同的选项中,去执行不同的操作。第三个方法判断是钝角,锐角,还是直角三角形也是通过其他俩点的斜率与各自对应的tan值考虑,在设计时必须考虑能够复用打的代码,图形类的题目大部分代码都是重复的,需要更改的只是方法还有输入要求和输出要求,所以在设计时要尽量低耦合。

  7-2 点线形系列4-凸四边形的计算

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

import java.util.Scanner;
public class Main {
    public static void illegal(String arr) {
        if(arr.indexOf(' ')==-1) {
            System.out.println("Wrong Format");
            System.exit (0);
        }
        if(arr.indexOf(':')==-1) {
            System.out.println("Wrong Format");
            System.exit (0);
        }
        if(arr.indexOf(',')==-1) {
            System.out.println("Wrong Format");
            System.exit (0);
        }
        for(int i=0;i<arr.length()-1;i++) {
            if(arr.charAt(i) == ' ' && arr.charAt(i+1) == ',' ||
                    arr.charAt(i) == ' ' && arr.charAt(i+1) == ' ' ||
                    arr.charAt(i) == ' ' && arr.charAt(i+1) == ':' ||
                    arr.charAt(i) == ' ' && arr.charAt(i+1) == '.' ||
                    arr.charAt(i) == ',' && arr.charAt(i+1) == ' ' ||
                    arr.charAt(i) == ',' && arr.charAt(i+1) == ',' ||
                    arr.charAt(i) == ',' && arr.charAt(i+1) == '.' ||
                    arr.charAt(i) == ',' && arr.charAt(i+1) == ':' ||
                    arr.charAt(i) == '.' && arr.charAt(i+1) == ' ' ||
                    arr.charAt(i) == '.' && arr.charAt(i+1) == ',' ||
                    arr.charAt(i) == '.' && arr.charAt(i+1) == '.' ||
                    arr.charAt(i) == '.' && arr.charAt(i+1) == ':' ||
                    arr.charAt(i) == ':' && arr.charAt(i+1) == ' ' ||
                    arr.charAt(i) == ':' && arr.charAt(i+1) == '.' ||
                    arr.charAt(i) == ':' && arr.charAt(i+1) == ',' ||
                    arr.charAt(i) == ':' && arr.charAt(i+1) == ':' ||
                    arr.charAt(i) == '0' && arr.charAt(i+1) == ':' ) {
                System.out.println("Wrong Format");
                System.exit (0);
            }
            else if(arr.charAt(0) == ' ' ||
                    arr.charAt(0) == ',' ||
                    arr.charAt(0) == ':' ||
                    arr.charAt(0) == '0' ||
                    arr.charAt(0) == '.') {
                System.out.println("Wrong Format");
                System.exit (0);
            }
            else if(arr.charAt(arr.length()-1) == ',' ||
                    arr.charAt(arr.length()-1) == ':' ||
                    arr.charAt(arr.length()-1) == '.') {
                System.out.println("Wrong Format");
                System.exit (0);
            }
        }
    }
    public void pointsWrong(String arr) {
        int a = 0;
        for(int i=0;i<arr.length();i++) {
            if(arr.charAt(i)==','){
                a++;
            }
        }
         if(arr.charAt(0)=='1'&&a!=4) {
             System.out.print("wrong number of points");
             System.exit (0);
         }
         else if(arr.charAt(0)=='2'&&a!=4) {
             System.out.print("wrong number of points");
             System.exit (0);
         }
         else if(arr.charAt(0)=='3'&&a!=4) {
             System.out.print("wrong number of points");
             System.exit (0);
         }
         else if(arr.charAt(0)=='4'&&a!=6) {
             System.out.print("wrong number of points");
             System.exit (0);
         }
         else if(arr.charAt(0)=='5'&&a!=5) {
             System.out.print("wrong number of points");
             System.exit (0);
         }
    }
        public static void main(String[] args) {
            // TODO 自动生成的方法存根
         Scanner input = new Scanner(System.in);
         String  arr = input.nextLine();
         illegal(arr);
         String[] array=arr.split(":|,| ");
         double[] arr1 = new double [array.length];
         for(int i=0;i<array.length;i++){
             arr1[i] = Double.parseDouble(array[i]);
         }
         if(arr1[0]== 1) {
             q1(arr1[1],arr1[2],arr1[3],arr1[4],arr1[5],arr1[6],arr1[7],arr1[8]);
         }
         else if(arr1[0]==2) {
             q2(arr1[1],arr1[2],arr1[3],arr1[4],arr1[5],arr1[6],arr1[7],arr1[8]);
         }
         else if(arr1[0]==3) {
             q3(arr1[1],arr1[2],arr1[3],arr1[4],arr1[5],arr1[6],arr1[7],arr1[8]);
         }
         else if(arr1[0]==4) {
             q4(arr1[1],arr1[2],arr1[3],arr1[4],arr1[5],arr1[6],arr1[7],arr1[8],arr1[9],arr1[10],arr1[11],arr1[12]);
         }
         else if(arr1[0]==5) {
             q5(arr1[1],arr1[2],arr1[3],arr1[4],arr1[5],arr1[6],arr1[7],arr1[8],arr1[9],arr1[10]);
         }
    }
        public static void q1(double x1,double y1,double x2,double y2,double x3,double y3,double x4,double y4) {
            if(x1==x2&&y1==y2) {
                System.out.print("points coincide");return;
            }
            if ((y4 - y3) * (x4 - x2) == (y4 - y2) * (x4 - x3)) {
                 System.out.print("false ");
                 if(((y1-y2)/(x1-x2))==((y3-y4)-(x3-x4))) {
                     System.out.print("true");
                     }
                 else
                     System.out.print("false");
             }
            else if ((y4 - y3) * (x4 - x1) == (y4 - y1) * (x4 - x3)) {
                 System.out.print("false ");
                 if(((y1-y2)/(x1-x2))==((y3-y4)-(x3-x4))) {
                     System.out.print("true");
                     }
                 else
                     System.out.print("false");}
            else if ((y4 - y2) * (x4 - x1) == (y4 - y1) * (x4 - x2)) {
                 System.out.print("false ");
                 if(((y1-y2)/(x1-x2))==((y3-y4)-(x3-x4))) {
                     System.out.print("true");
                     }
                 else
                     System.out.print("false");}
            else if ((y3 - y2) * (x3 - x1) == (y3 - y1) * (x3 - x2)) {
                 System.out.print("false ");
                 if(((y1-y2)/(x1-x2))==((y3-y4)-(x3-x4))) {
                     System.out.print("true");
                     }
                 else
                     System.out.print("false");}
            else {
                System.out.print("true ");
                if(((y1-y2)/(x1-x2))==((y3-y4)-(x3-x4))) {
                    System.out.print("true");
                    }
                else
                    System.out.print("false");
            }

         }
        public static void q2(double x1,double y1,double x2,double y2,double x3,double y3,double x4,double y4) {
              int a=0;
            if(x1==x2&&y1==y2) {
                System.out.print("points coincide");return;
            }
            if ((y4 - y3) * (x4 - x2) == (y4 - y2) * (x4 - x3)) {
                System.out.print("not a quadrilateral");}
            else if ((y4 - y3) * (x4 - x1) == (y4 - y1) * (x4 - x3)) {
                System.out.print("not a quadrilateral");}
            else if ((y4 - y2) * (x4 - x1) == (y4 - y1) * (x4 - x2)) {
                System.out.print("not a quadrilateral");}
            else if ((y3 - y2) * (x3 - x1) == (y3 - y1) * (x3 - x2)) {
                System.out.print("not a quadrilateral");}
            else {
                    if(y1+y3==y2+y4&&x1+x3==x2+x4) {
                        if((y1-y2)*(y1-y2)+(x1-x2)*(x1-x2)==((y3-y4)*(y3-y4)+(x3-x4)*(x3-x4))) {
                            System.out.print("true ");
                        }
                        else
                            System.out.print("false ");
                     if((x1-x3)*(x2-x4)+(y1-y3)*(y2-y4)==0) {
                         System.out.print("true ");
                         a=1;}
                     else 
                         System.out.print("false ");
                    }
                     if(a==1) {
                         if((y1-y2)*(y1-y2)+(x1-x2)*(x1-x2)==((y3-y4)*(y3-y4)+(x3-x4)*(x3-x4))) {
                              System.out.print("true");
                          }
                          else
                              System.out.print("false");
                         }
                     
         }
     }
  
        public static double S(double x1,double y1,double x2,double y2,double x3,double y3){
            
            return Math.abs(0.5*(x1*(y2-y3)+x2*(y3-y1)+x3*(y1-y2)));
        }
        public static double C(double x1,double y1,double x2,double y2,double x3,double y3,double x4,double y4) {
            return (Math.sqrt((y1-y2)*(y1-y2)+(x1-x2)*(x1-x2))+Math.sqrt((y2-y3)*(y2-y3)+(x2-x3)*(x2-x3))
            +Math.sqrt((y3-y4)*(y3-y4)+(x3-x4)*(x3-x4))+Math.sqrt((y1-y4)*(y1-y4)+(x1-x4)*(x1-x4)));
        }
        public static void q3(double x1,double y1,double x2,double y2,double x3,double y3,double x4,double y4) {
            if(x1==x2&&y1==y2) {
                System.out.print("points coincide");return;
            }
            if ((y4 - y3) * (x4 - x2) == (y4 - y2) * (x4 - x3)) {
                System.out.print("not a quadrilateral");}
            else if ((y4 - y3) * (x4 - x1) == (y4 - y1) * (x4 - x3)) {
                System.out.print("not a quadrilateral");}
            else if ((y4 - y2) * (x4 - x1) == (y4 - y1) * (x4 - x2)) {
                System.out.print("not a quadrilateral");}
            else if ((y3 - y2) * (x3 - x1) == (y3 - y1) * (x3 - x2)) {
                System.out.print("not a quadrilateral");}
            else {
                if(S(x1,y1,x2,y2,x3,y3)+(S(x3,y3,x4,y4,x1,y1))==S(x2,y2,x3,y3,x4,y4)+(S(x4,y4,x1,y1,x2,y2))){
                    System.out.print("true ");
                    System.out.print(String.format("%.3f",C(x1,y1,x2,y2,x3,y3,x4,y4)));
                    System.out.print(" ");
                    System.out.print(String.format("%.1f",(S(x1,y1,x2,y2,x4,y4)+S(x3,y3,x2,y2,x4,y4))));
                }
                else {System.out.print("false ");
                System.out.print(String.format("%.3f",C(x1,y1,x2,y2,x3,y3,x4,y4)));
                      System.out.print(" ");
                    System.out.print(String.format("%.1f",(S(x1,y1,x2,y2,x4,y4)-S(x3,y3,x2,y2,x4,y4))));
                     }
            }
         }
        public static void q4(double x1,double y1,double x2,double y2,double x3,double y3,double x4,double y4,double x5,double y5,double x6,double y6) {
            
            System.out.print("not a quadrilateral or triangle");
        }
        public static void q5(double x1,double y1,double x2,double y2,double x3,double y3,double x4,double y4,double x5,double y5) {
            
        System.out.print("outof the quadrilateral");
        }
}

SourceMonitor:

  分析:该题也是图形类,相比上个题目集更为复杂,在不同的选项中,去执行不同的操作。第一个方法判断是否为四边形或平行四边形通过是否是有任意三点成一线判断是否为四边形,在四边形的基础上判断是否有俩边平行判断是否为平行四边形,第二个方法判断菱形,矩形和正方形,领边相等即为菱形,在平行四边形的基础上考虑对角线互相平分即对角点的中点为同一个点,便为矩形,在矩形的基础上临边相等即为正方形,无论是凹四边形还是凸四边形都能用俩个三角形来表示,如果S(x1,y1,x2,y2,x3,y3)+(S(x3,y3,x4,y4,x1,y1)==S(x2,y2,x3,y3,x4,y4)+(S(x4,y4,x1,y1,x2,y2)则为凸四边形,反之则为凹四边形,面积凸四边形则为俩个三角形面积之和,凹四边形为俩个三角形之差。

  链表练习

使用Java实现链表功能,具体功能如下(参考):

public interface LinearListInterface <E>{

        public boolean isEmpty();

public int getSize();

public E get(int index);

public void remove(int index);

public void add(int index, E theElement);

        public void add(E  element);

public void printList();    

}

结构如下:

//LinkedList class

public class LList<E>{

private Node<E> head,curr,tail;//头结点(非第一个节点),当前节点,尾节点

  private int size = 0;

}

 

//Node

public class Node<E>{

private E data;

private Node<E> next;

}


public interface LinearListInterface<E> {


public boolean isEmpty();


public int getSize();


public E get(int index);


public void remove(int index);


public void add(int index, E theElement);


public void add(E element);


public void printList();


}


public
class LList<E> implements LinearListInterface<E> { private Node<E> head;// 头结点(非第一个节点),当前节点,尾节点 private Node<E> curr; private Node<E> tail; private int size = 0; public LList() { super(); // TODO Auto-generated constructor stub head = new Node<E>(); head.setNext(null); curr = tail = null; this.size = 0; } @Override public boolean isEmpty() { // TODO Auto-generated method stub return this.size == 0; } @Override public int getSize() { // TODO Auto-generated method stub return this.size; } @Override public E get(int index) { // TODO Auto-generated method stub if(index < 1 || index > this.size) { return null; } curr = head; for(int i = 0; i < index; i ++) { curr = curr.getNext(); } return curr.getData(); } @Override public void remove(int index) { // TODO Auto-generated method stub if(index < 1 || index > this.size) { return ; } curr = head; if(index == 1) { curr = head.getNext(); head.setNext(curr.getNext()); }else {//找到第index - 1个节点赋给curr for(int i = 1;i < index; i++) { curr = curr.getNext(); } curr.setNext(curr.getNext().getNext()); } if(index == this.size) {//如果删除的是最后一个节点 tail = curr; } this.size --;//整个链表的节点数量-1 } @Override public void add(int index, E theElement) { // TODO Auto-generated method stub if(index < 1 || index > this.size + 1) { return ; } Node<E> curr = new Node<>(); curr.setData(theElement); curr.setNext(null); if(this.size == 0) { head.setNext(curr); tail = curr; }else if(index == this.size + 1) { this.tail.setNext(curr); tail = curr; }else { Node<E> tempNode = head; for(int i = 1; i < index;i++) { tempNode = tempNode.getNext(); } curr.setNext(tempNode.getNext()); tempNode.setNext(curr); } this.size ++; } @Override public void add(E element) { // TODO Auto-generated method stub this.add(this.size + 1,element); } @Override public void printList() { // TODO Auto-generated method stub curr = head.getNext(); for(int i = 1; i <= this.size;i ++) { System.out.print(curr.getData() + " "); curr = curr.getNext(); } System.out.println(""); } public E getLast() { if(this.size != 0) { return tail.getData(); } return null; } }

public class Main {


public static void main(String[] args) {
// TODO Auto-generated method stub
LList<Integer> list = new LList<>();

list.add(2);
list.add(4);
list.add(6);
list.add(8);
list.printList();
list.remove(3);

list.printList();
list.add(2,100);
list.printList();
System.out.println(list.get(4));
}

}


//Node
public class Node<E> {
private E data;
private Node<E> next;

public Node() {


}

public Node(E data, Node<E> next) {
super();
this.data = data;
this.next = next;
}


public E getData() {
return data;
}


public void setData(E data) {
this.data = data;
}


public Node<E> getNext() {
return next;
}


public void setNext(Node<E> next) {
this.next = next;
}

}

 

 分析:本题用java语言实现一个链表,链表属于一种常见的基础数据结构,结构体指针得到大量运用,而java中并没有指针一说,但是java中的“引用”也可以代替指针的作用,getter与setter方法的灵活运用也能代替指针的用法,结构体也可以使用“类”来代替,接口也是一种独特的结构,Java接口是一系列方法的声明,是一些方法特征的集合。

  期中考试

  7-1 点与线(类设计)


 


import java.util.Scanner;


class Point {
private double x;
private double y;
public Point() {
super();
// TODO Auto-generated constructor stub
}
public Point(double x, double y) {
super();
this.x = x;
this.y = y;
}
public double getX() {
return x;
}
public voi吖le y) {
this.y = y;
}
public void dispaly(double x,double y) {
if(x>0&&x<=200&&y>0&&y<=200) {
System.out.println(String.format("(%.2f,%.2f)", x,y));
}
else {
System.out.print("Wrong Format");
}
}
}
class Line{
private Point point1;
private Point point2;
private String color;
public Line() {
super();
// TODO Auto-generated constructor stub
}
public Line(Point point1, Point point2, String color) {
super();
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(Point point1,Point point2) {
double x1 = point1.getX();
double y1 = point1.getY();
double x2 = point2.getX();
double y2 = point2.getY();
double distance=0;
distance=Math.sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2));
return distance;
}
public void display(Point point1,Point point2,String color) {
double x1 = point1.getX();
double y1 = point1.getY();
double x2 = point2.getX();
double y2 = point2.getY();
if(x1>0&&x1<=200&&y1>0&&y1<=200&&x2>0&&x2<=200&&y2>0&&y2<=200){
System.out.print("The line's color is:");
System.out.println(color);
System.out.println("The line's begin point's Coordinate is:");
System.out.println(String.format("(%.2f,%.2f)", x1,y1));
System.out.println("The line's end point's Coordinate is:");
System.out.println(String.format("(%.2f,%.2f)", x2,y2));
System.out.print("The line's length is:");
System.out.print(String.format("%.2f",getDistance(point1,point2) ));
}
else{
System.out.print("Wrong Format");
}

}
}
public class Main{
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.next();
Point point1 = new Point(x1,y1);
Point point2 = new Point(x2,y2);
Line line = new Line(point1,point2,color);
line.display(point1,point2,color);
}
}


 

 

  分析:本次题目主要考察类的设计,根据题目提示与类图,一步步将整个框架架好,然后具体考虑方法中的细节。

  7-2 点线面问题重构(继承与多态)

import java.util.Scanner;

class Point extends Element{
private  double x;
private  double y;
public Point() {
    super();
    // TODO Auto-generated constructor stub
}
public Point(double x, double y) {
    super();
    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 dispaly(double x,double y) {
     if(x>0&&x<=200&&y>0&&y<=200) {
         System.out.println(String.format("(%.2f,%.2f)", x,y));
     }
     else {
         System.out.print("Wrong Format");
     }
}
}
class Line extends Element{
     private Point point1;
     private Point point2;
     private String color;
     public Line() {
        super();
        // TODO Auto-generated constructor stub
     }
    public Line(Point point1, Point point2, String color) {
        super();
        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(Point point1,Point point2) {
        double x1 = point1.getX();
        double y1 = point1.getY();
        double x2 = point2.getX();
        double y2 = point2.getY();
        double distance=0;
        distance=Math.sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2));
        return distance;
    }
    public void display(Point point1,Point point2,String color) {
        double x1 = point1.getX();
        double y1 = point1.getY();
        double x2 = point2.getX();
        double y2 = point2.getY();
        if(x1>0&&x1<=200&&y1>0&&y1<=200&&x2>0&&x2<=200&&y2>0&&y2<=200){
        System.out.print("The line's color is:");
        System.out.println(color);
        System.out.println("The line's begin point's Coordinate is:");
        System.out.println(String.format("(%.2f,%.2f)", x1,y1));
        System.out.println("The line's end point's Coordinate is:");
        System.out.println(String.format("(%.2f,%.2f)", x2,y2));
        System.out.print("The line's length is:");
        System.out.println(String.format("%.2f",getDistance(point1,point2) ));
        }
        else{
             System.out.print("Wrong Format");
        }
            
    }
}
class Element{
    public void dispaly(double x,double y) {
         if(x>0&&x<=200&&y>0&&y<=200) {
             System.out.println(String.format("(%.2f,%.2f)", x,y));
         }
         else {
             System.out.print("Wrong Format");
         }
    }
    public void display(Point point1,Point point2,String color) {
        Line line = new Line(point1,point2,color);
        double x1 = point1.getX();
        double y1 = point1.getY();
        double x2 = point2.getX();
        double y2 = point2.getY();
        if(x1>0&&x1<=200&&y1>0&&y1<=200&&x2>0&&x2<=200&&y2>0&&y2<=200){
        System.out.print("The line's color is:");
        System.out.println(color);
        System.out.println("The line's begin point's Coordinate is:");
        System.out.println(String.format("(%.2f,%.2f)", x1,y1));
        System.out.println("The line's end point's Coordinate is:");
        System.out.println(String.format("(%.2f,%.2f)", x2,y2));
        System.out.print("The line's length is:");
        System.out.println(String.format("%.2f",line.getDistance(point1,point2) ));
        }
        else{
             System.out.print("Wrong Format");
        }   
    }
    public void display(String color) {
        System.out.println("The Plane's color is:"+color);
    }
}
class Plane extends Element{
    private String color;

    public Plane() {
        super();
        // TODO Auto-generated constructor stub
    }

    public String getColor() {
        return color;
    }

    public void setColor(String color) {
        this.color = color;
    }

    public Plane(String color) {
        super();
        this.color = color;
    }
    public void display(String color) {
        System.out.println("The Plane's color is:"+color);
    }
}
    public class Main{
        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.next();
            Point point1 = new Point(x1,y1);
            Point point2 = new Point(x2,y2);
            Line line = new Line(point1,point2,color);
            Plane plane = new Plane();
            Element element = new Element();
            if(x1>0&&x1<=200&&y1>0&&y1<=200&&x2>0&&x2<=200&&y2>0&&y2<=200) {
            element = point1;//起点Point
            element.dispaly(x1,y1);
            element = point2;//终点Point
            element.dispaly(x2,y2);
            element = line;//线段
            element.display(point1,point2,color);
            element = plane;//
            element.display(color);
            }
            else
                System.out.print("Wrong Format");
           
        }
    }

   分析:本题在第一题的基础上使用继承与多态来改进代码,增加代码的可复用性和扩展性。首先建立一个公共的抽象父类Element,其中要有共同拥有的方法display()。在主类中用父类的对象来引用子类的对象以及方法。

  7-3 点线面问题再重构(容器类)

import java.util.Scanner;
import java.util.ArrayList;

class Point extends Element{
private  double x;
private  double y;
public Point() {
    super();
    // TODO Auto-generated constructor stub
}
public Point(double x, double y) {
    super();
    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 dispaly(double x,double y) {
     if(x>0&&x<=200&&y>0&&y<=200) {
         System.out.println(String.format("(%.2f,%.2f)", x,y));
     }
     else {
         System.out.print("Wrong Format");
     }
}
}
class Line extends Element{
     private Point point1;
     private Point point2;
     private String color;
     public Line() {
        super();
        // TODO Auto-generated constructor stub
     }
    public Line(Point point1, Point point2, String color) {
        super();
        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(Point point1,Point point2) {
        double x1 = point1.getX();
        double y1 = point1.getY();
        double x2 = point2.getX();
        double y2 = point2.getY();
        double distance=0;
        distance=Math.sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2));
        return distance;
    }
    public void display(Point point1,Point point2,String color) {
        double x1 = point1.getX();
        double y1 = point1.getY();
        double x2 = point2.getX();
        double y2 = point2.getY();
        if(x1>0&&x1<=200&&y1>0&&y1<=200&&x2>0&&x2<=200&&y2>0&&y2<=200){
        System.out.print("The line's color is:");
        System.out.println(color);
        System.out.println("The line's begin point's Coordinate is:");
        System.out.println(String.format("(%.2f,%.2f)", x1,y1));
        System.out.println("The line's end point's Coordinate is:");
        System.out.println(String.format("(%.2f,%.2f)", x2,y2));
        System.out.print("The line's length is:");
        System.out.println(String.format("%.2f",getDistance(point1,point2) ));
        }
        else{
             System.out.print("Wrong Format");
        }
            
    }
}
class Element{
    public void dispaly(double x,double y) {
         if(x>0&&x<=200&&y>0&&y<=200) {
             System.out.println(String.format("(%.2f,%.2f)", x,y));
         }
         else {
             System.out.print("Wrong Format");
         }
    }
    public void display(Point point1,Point point2,String color) {
        Line line = new Line(point1,point2,color);
        double x1 = point1.getX();
        double y1 = point1.getY();
        double x2 = point2.getX();
        double y2 = point2.getY();
        if(x1>0&&x1<=200&&y1>0&&y1<=200&&x2>0&&x2<=200&&y2>0&&y2<=200){
        System.out.print("The line's color is:");
        System.out.println(color);
        System.out.println("The line's begin point's Coordinate is:");
        System.out.println(String.format("(%.2f,%.2f)", x1,y1));
        System.out.println("The line's end point's Coordinate is:");
        System.out.println(String.format("(%.2f,%.2f)", x2,y2));
        System.out.print("The line's length is:");
        System.out.println(String.format("%.2f",line.getDistance(point1,point2) ));
        }
        else{
             System.out.print("Wrong Format");
        }   
    }
    public void display(String color) {
        System.out.println("The Plane's color is:"+color);
    }
}
class Plane extends Element{
    private String color;

    public Plane() {
        super();
        // TODO Auto-generated constructor stub
    }

    public String getColor() {
        return color;
    }

    public void setColor(String color) {
        this.color = color;
    }

    public Plane(String color) {
        super();
        this.color = color;
    }
    public void display(String color) {
        System.out.println("The Plane's color is:"+color);
    }
}
class GemetryObject{
    ArrayList list = new ArrayList();
    public void add(Element element) {
        
    }
    public void remove(int index) {
        
    }
}
    public class Main{
        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.next();
            Point point1 = new Point(x1,y1);
            Point point2 = new Point(x2,y2);
            Line line = new Line(point1,point2,color);
            Plane plane = new Plane();
            GemetryObject geme = new GemetryObject();
            Element element = new Element();
            int choice = input.nextInt();
            while(choice != 0) {
                switch(choice) {
                case 1://insert Point object into list 
                    geme.add(point1);
                    break;
                case 2://insert Line object into list
                    geme.add(line);
                    break;
                case 3://insert Plane object into list
                    geme.add(plane);
                    break;
                case 4://delete index - 1 object from list
                    int index = input.nextInt();
                    geme.remove(index-1);
                }
                choice = input.nextInt();
                    
                }
            point1.dispaly(x1,y1);
            line.display(point1,point2,color);
            plane.display(color);
            }
}
            

 分析:本题在第一题的基础上使用容器来改进代码,增加代码的可复用性和扩展性。首先建立一个容器类GemetryObject,其中要有增加和删减成员的方法add与remove。ArrayList必须得熟练运用。

三、总结

  经过第二次的阶段性作业练习,对于java我有了更深的认识,首先就是分析大于实现,只有更好地去把时间花在分析上才能更好地实现代码,然后就是自学真的很重要,本次作业的大部分内容都是自学的,java内容浩如烟海,光凭老师四十分钟的讲课是远远不够的,只有自己不断的学习,不断地去接受新的知识才能更好地学习java。

  这次踩到最大的坑就是next()与nextLine()的区别,在尝试用nextLine()输入了N遍还是错误后得知,nextLine方式输入的字符串可以含有空格,也就是说它是以回车作为输入的结束符。next输入的字符串不能含有空格,它以空格、tab、回车作为输入的结束符。

  这次我也学到了很多很有用的新的东西,“正则表达式”在字符串的操作中也会取得很好的效果,String.format("(%.2f,%.2f)", x1,y1)在输出字符串时也可以输出特定的小数点的值。最主要的是对于写代码思想的转变,比起茫无目的的敲代码,分析与设计或许才是成为一个真正的“程序员”需要的能力吧!

 
posted on 2022-05-01 20:58  Chrispaul1  阅读(59)  评论(0)    收藏  举报