作业以及期中考试

前三次作业总结

一.   前言

至今为止,已写多次作业,难度逐层递增。后面的作业都是以前的作业为基础,在此之上进行要求在线。如果说是前3次作业是为我们从面向过程到面向对象思想的转变,那么这几次作业就是让我们对面向过程思想有了一个更加深刻的认知。继承,多态,以及对象容器,这都是面向过程思想的进一步进阶。这几次作业的题量并不是比较大,但是质量那是出奇的高。每道题要用到的数学知识那时非常的丰富,这主要考查了除数学能力,还着重考查了类的合理设计规划,类库中类的使用等等。

二.   设计与分析

题目集4   7-2

import java.util.*;

import static java.lang.Math.pow;

import java.util.regex.Matcher;

import java.util.regex.Pattern;

import java.text.DecimalFormat;

 

class Point

{

       double x, y;

   

    void set(double x, double y)

    {

        this.x = x;

        this.y = y;

    }

   

    double calculation(Point p)

    {

        return Math.sqrt(Math.pow(p.x - x, 2) + Math.pow(p.y - y, 2));

    }

}

 

class Line

{

       double tan(Point p1, Point p2)

    {

        double k;

        k = (p1.y - p2.y)/(p1.x - p2.x);

        return k;

    }

    //计算线段斜率

   

    void Distance(Point p1, Point p2, Point p3)

    {

        double m1=Math.abs((p3.y-p2.y)*p1.x+(p2.x-p3.x)*p1.y+p3.x*p2.y-p3.y*p2.x)/Math.sqrt((p3.y-p2.y) * (p3.y-p2.y) +(p3.x-p2.x) * (p3.x-p2.x));

        System.out.print(m1);

    }

   

    boolean collineation(Point p1, Point p2, Point p3)

    {

        double k, l;

        k = (p1.y - p2.y)/(p1.x - p2.x);

        l = (p2.y - p3.y)/(p2.x - p3.x);

        if(p1.x == p2.x && p2.x == p3.x)

        {

            return true;

        }

        if(k == l)

        {

            return true;

        }

        else

            return false;

    }

   

    void parallel (Point p1, Point p2, Point p3, Point p4)

    {

        double k, l;

        k = (p1.y - p2.y)/(p1.x - p2.x);

        l = (p4.y - p3.y)/(p4.x - p3.x);

        if((p1.x == p2.x) && (p3.x == p4.x))

        {

             System.out.print("true");

            return;

        }

        if(k == l)

            System.out.print("true");

        else

            System.out.print("false");

    }

   

     public static int getNumberDecimalDigits(float number)

    {

        if (number == (long)number) {

            return 0;

        }

        int i = 0;

        while (true){

            i++;

            if (number * Math.pow(10, i) % 1 == 0) {

                return i;

            }

        }

    }

   

    double s(Point p1, Point p2, Point p3)

    {

           double k = (p1.calculation(p2) +  p1.calculation(p3) + p2.calculation(p3)) / 2;

           return ( Math.sqrt( k * ( k - p1.calculation(p2) ) * ( k - p1.calculation(p3) ) * ( k - p2.calculation(p3) ) ) );

    }

}

 

class Check

{

       String str;

    int n = 1;

   

    Check(String str)

    {

        this.str = str;

        int m = 0;

 

        if(str.charAt(0) != '4' && str.charAt(0) != '5')

        {

            String c = "^[1-3]?:([+-]?([1-9]\\d*|0)(\\.\\d+)?,[+-]?([1-9]\\d*|0)(\\.\\d+)? ?)+$";

            if(!Pattern.matches(c, str))

            {

                System.out.print("Wrong Format");

                n = 0;

                return;

            }

           for(int i = 0; i < str.length(); ++i)

            {

                if(str.charAt(i) == ' ')

                    m++;

            }

            if(m != 3)

            {

                System.out.print("wrong number of points");

                n = 0;

                return;

            }

        }

        else if(str.charAt(0) == '4')

        {

            String c = "^[4]?:([+-]?([1-9]\\d*|0)(\\.\\d+)?,[+-]?([1-9]\\d*|0)(\\.\\d+)? ?)+$";

            if(!Pattern.matches(c, str))

            {

                System.out.print("Wrong Format");

                n = 0;

                return;

            }

            for(int i = 0; i < str.length(); ++i)

            {

                if(str.charAt(i) == ' ')

                    m++;

            }

            if(m != 5)

            {

                System.out.print("wrong number of points");

                n = 0;

                return;

            }

        }

        else

        {

            String c = "^[5]?:([+-]?([1-9]\\d*|0)(\\.\\d+)?,[+-]?([1-9]\\d*|0)(\\.\\d+)? ?)+$";

            if(!Pattern.matches(c, str))

            {

                System.out.print("Wrong Format");

                n = 0;

                return;

            }

               for(int i = 0; i < str.length(); ++i)

            {

                if(str.charAt(i) == ' ')

                    m++;

            }

            if(m != 4)

            {

                System.out.print("wrong number of points");

                n = 0;

                return;

            }

              }

    }

   

    Check(Point p1, Point p2, Point p3, Point p4)

    {

           if(p1.x == p2.x && p1.y == p2.y)

           {

                  System.out.print("points coincide");

                  System.exit(0);

           }

           else if (p1.x == p3.x && p1.y == p3.y)

           {

                  System.out.print("points coincide");

                  System.exit(0);

              }

           else if (p1.x == p4.x && p1.y == p4.y)

           {

                  System.out.print("points coincide");

                  System.exit(0);

              }

           else if (p2.x == p3.x && p2.y == p3.y)

           {

                  System.out.print("points coincide");

                  System.exit(0);

              }

           else if (p2.x == p4.x && p2.y == p4.y)

           {

                  System.out.print("points coincide");

                  System.exit(0);

              }

           else if (p3.x == p4.x && p3.y == p4.y)

           {

                  System.out.print("points coincide");

                  System.exit(0);

              }

    }

}

 

class Quadrilateral

{

       boolean IsQuadrilateral = true,

                     IsParallelogram = false,

                     IsDiamond = false,

                     IsRectangle = false,

                     IsSquare = false;

      

       void IsQuadrilateral(Point p1, Point p2, Point p3, Point p4)

       {

           Line l1 = new Line();

              if(l1.collineation(p1, p2, p3) == true)

              {

                     IsQuadrilateral = false;

              }

              else if(l1.collineation(p1, p2, p4) == true)

              {

                     IsQuadrilateral = false;

              }

              else if(l1.collineation(p1, p3, p4) == true)

              {

                     IsQuadrilateral = false;

              }

              else if(l1.collineation(p2, p3, p4) == true)

              {

                     IsQuadrilateral = false;

              }

              else

                     IsQuadrilateral = true;

             

              if(IsQuadrilateral == false)

              {

                     IsParallelogram = false;

              }

              else if((p1.calculation(p2) == p3.calculation(p4)) && (p1.calculation(p4) == p2.calculation(p3)))

              {

                     IsParallelogram = true;

              }

              else

                     IsParallelogram = false;

       }

      

       void output()

       {

              System.out.print( IsQuadrilateral + " " );

              System.out.print( IsParallelogram );

       }

      

       void IsSquare(Point p1, Point p2, Point p3, Point p4)

       {

              Line L2 = new Line();

              if(IsQuadrilateral == false)

              {

                     System.out.print( "not a quadrilateral" );

                     System.exit(0);

              }

              else

              {

                     if(IsParallelogram == false)

                     {

                            System.out.print( "false false false" );

                            System.exit(0);

                     }

                     else

                     {

                            if( p1.calculation(p2) == p1.calculation(p4) )

                            {

                                   IsDiamond = true;

                                   System.out.print( IsDiamond + " " );

                            }

                            else

                            {

                                   System.out.print( IsDiamond + " " );

                            }

                            if( p1.calculation(p3) == p2.calculation(p4) )

                            {

                                   IsRectangle = true;

                                   System.out.print( IsRectangle + " " );

                            }

                            else

                            {

                                   System.out.print( IsRectangle + " " );

                            }

                            if(IsRectangle == true && IsDiamond == true)

                            {

                                   IsSquare = true;

                                   System.out.print( IsSquare );

                            }

                            else

                            {

                                   System.out.print( IsSquare );

                            }

                     }

              }

       }

   

    void IsConvex(Point p1, Point p2, Point p3, Point p4)

       {

              Line L1 = new Line();

              if(IsQuadrilateral == false)

              {

                     System.out.print( "not a quadrilateral" );

                     System.exit(0);

              }

              else

              {

                     double s0 = L1.s(p1,p2,p3)+ L1.s(p3,p4,p1);

                     double s1 = L1.s(p2,p3,p4)+ L1.s(p4,p1,p2);

                     double L = ( p1.calculation(p2) + p2.calculation(p3) + p3.calculation(p4) + p4.calculation(p1) );

                     double S = ( L1.s(p1, p2, p3) + L1.s(p1, p3, p4) );

                     float l = (float) L;

                     float s = (float) S;

                     if(s0 == s1)

                     {

                            System.out.print( true + " " );

                     }

                     else

                     {

                            System.out.print( false + " " );

                     }

                    

                     if(Line.getNumberDecimalDigits(l) <= 3)

                     {

                            System.out.print( L + " " );

                     }

                     else

                     {

                            System.out.print( new DecimalFormat("#.0##").format(L) + " " );

                     }

                    

                     if(Line.getNumberDecimalDigits(s) <= 3)

                     {

                            System.out.print( s  );

                     }

                     else

                     {

                            System.out.print( new DecimalFormat("#.0##").format(S) );

                     }

              }

       }

}

 

public class Main

{

       public static void main(String[] args)

       {

               Scanner input = new Scanner(System.in);

            String str = input.nextLine();

            Check c1 = new Check(str);

            if(c1.n == 0)

            {

                return;

            }

            String[] str1 = str.split(":|,|\\s+");

            double[] data = new double[str1.length];

            for(int j = 0; j < data.length; ++j)

            {

          data[j] = Double.parseDouble(str1[j]);

         }

            int i = (int) data[0];

            switch(i)

            {

                 case 1:

                 {

                        Point p1 = new Point();

                Point p2 = new Point();

                Point p3 = new Point();

                Point p4 = new Point();

                p1.set(data[1], data[2]);

                p2.set(data[3], data[4]);

                p3.set(data[5], data[6]);

                p4.set(data[7], data[8]);

                Check C1 = new Check(p1, p2, p3, p4);

                Quadrilateral Q1 = new Quadrilateral();

                Q1.IsQuadrilateral(p1, p2, p3, p4);

                Q1.output();

                break;

                 }

                 case 2:

                 {

                        Point p1 = new Point();

                Point p2 = new Point();

                Point p3 = new Point();

                Point p4 = new Point();

                p1.set(data[1], data[2]);

                p2.set(data[3], data[4]);

                p3.set(data[5], data[6]);

                p4.set(data[7], data[8]);

                Quadrilateral Q1 = new Quadrilateral();

                Q1.IsQuadrilateral(p1, p2, p3, p4);

                Q1.IsSquare(p1, p2, p3, p4);

                break;

                 }

            case 3:

                 {

                        Point p1 = new Point();

                Point p2 = new Point();

                Point p3 = new Point();

                Point p4 = new Point();

                p1.set(data[1], data[2]);

                p2.set(data[3], data[4]);

                p3.set(data[5], data[6]);

                p4.set(data[7], data[8]);

                Quadrilateral Q1 = new Quadrilateral();

                Q1.IsQuadrilateral(p1, p2, p3, p4);

                Q1.IsConvex(p1, p2, p3, p4);

                break;

            }

            case 4:

            {

               System.out.print("not a quadrilateral or triangle");

                break;

            }

             case 5:

                 {

                     System.out.print("not a quadrilateral or triangle");

                break;

                 }

            }

       }

}

类:Point

属性:double x, y

方法:set(double x, double y),calculation(Point p)

 

类:Line

属性:无

方法:tan(Point p1, Point p2)

  void Distance(Point p1, Point p2, Point p3),

collineation(Point p1, Point p2, Point p3)

 parallel (Point p1, Point p2, Point p3, Point p4),

  getNumberDecimalDigits(float number)

s(Point p1, Point p2, Point p3)

 

类:check

属性:String str, int n

方法:check(String str)

Check(Point p1, Point p2, Point p3, Point p4)

 

类:Quadrilateral

属性:boolean IsQuadrilateral = true,

                     IsParallelogram = false,

                     IsDiamond = false,

                     IsRectangle = false,

                     IsSquare = false;

方法:IsQuadrilateral(Point p1, Point p2, Point p3, Point p4)

output()

IsSquare(Point p1, Point p2, Point p3, Point p4)

IsConvex(Point p1, Point p2, Point p3, Point p4)

 

 

对于此题,我的思路是先设置一系列标志符来联系函数之间的联系,之后创建一个Scanner类的对象进行用户输入功能,String型变量来储存用户输入的数据。然后就编写解析数据的代码,提取出来有效数据。若有多个就对其进行编号分行进行区分,之后就对有效数据按照题目的数据要求进行校验如果校验有误输出相对应的结果,并且改变标识符来结束其他函数的调用。继承上次PTA大作业的类,并且添加相应的需求。

对于此题我对类的理解并不是非常深刻,没有做到对类的合理规划以及在主函数中的合理利用,这是一个难点需要我对其认真解决。

题目集5  7-1

import java.util.*;

import static java.lang.Math.pow;

import java.util.regex.Matcher;

import java.util.regex.Pattern;

import java.text.DecimalFormat;

 

class Point

{

       double x, y;

   

    void set(double x, double y)

    {

        this.x = x;

        this.y = y;

    }

   

    double calculation(Point p)

    {

        return Math.sqrt(Math.pow(p.x - x, 2) + Math.pow(p.y - y, 2));

    }

}

 

class Line

{

       double tan(Point p1, Point p2)

    {

        double k;

        k = (p1.y - p2.y)/(p1.x - p2.x);

        return k;

    }

    //计算线段斜率

   

    void Distance(Point p1, Point p2, Point p3)

    {

        double m1=Math.abs((p3.y-p2.y)*p1.x+(p2.x-p3.x)*p1.y+p3.x*p2.y-p3.y*p2.x)/Math.sqrt((p3.y-p2.y) * (p3.y-p2.y) +(p3.x-p2.x) * (p3.x-p2.x));

        System.out.print(m1);

    }

   

    boolean collineation(Point p1, Point p2, Point p3)

    {

        double k, l;

        k = (p1.y - p2.y)/(p1.x - p2.x);

        l = (p2.y - p3.y)/(p2.x - p3.x);

        if(p1.x == p2.x && p2.x == p3.x)

        {

            return true;

        }

        if(k == l)

        {

            return true;

        }

        else

            return false;

    }

   

    void parallel (Point p1, Point p2, Point p3, Point p4)

    {

        double k, l;

        k = (p1.y - p2.y)/(p1.x - p2.x);

        l = (p4.y - p3.y)/(p4.x - p3.x);

        if((p1.x == p2.x) && (p3.x == p4.x))

        {

             System.out.print("true");

            return;

        }

        if(k == l)

            System.out.print("true");

        else

            System.out.print("false");

    }

   

     public static int getNumberDecimalDigits(float number)

    {

        if (number == (long)number) {

            return 0;

        }

        int i = 0;

        while (true){

            i++;

            if (number * Math.pow(10, i) % 1 == 0) {

                return i;

            }

        }

    }

   

    double s(Point p1, Point p2, Point p3)

    {

           double k = (p1.calculation(p2) +  p1.calculation(p3) + p2.calculation(p3)) / 2;

           return ( Math.sqrt( k * ( k - p1.calculation(p2) ) * ( k - p1.calculation(p3) ) * ( k - p2.calculation(p3) ) ) );

    }

}

 

class Check

{

       String str;

    int n = 1;

   

    Check(String str)

    {

        this.str = str;

        int m = 0;

 

        if(str.charAt(0) != '3')

        {

            String c = "^[1-2]?:([+-]?([1-9]\\d*|0)(\\.\\d+)?,[+-]?([1-9]\\d*|0)(\\.\\d+)? ?)+$";

            if(!Pattern.matches(c, str))

            {

                System.out.print("Wrong Format");

                n = 0;

                return;

            }

           for(int i = 0; i < str.length(); ++i)

            {

                if(str.charAt(i) == ' ')

                    m++;

            }

            if(m != 4)

            {

                System.out.print("wrong number of points");

                n = 0;

                return;

            }

        }

        else

        {

            String c = "^[3]?:([+-]?([1-9]\\d*|0)(\\.\\d+)?,[+-]?([1-9]\\d*|0)(\\.\\d+)? ?)+$";

            if(!Pattern.matches(c, str))

            {

                System.out.print("Wrong Format");

                n = 0;

                return;

            }

           for(int i = 0; i < str.length(); ++i)

            {

                if(str.charAt(i) == ' ')

                    m++;

            }

            if(m != 6)

            {

                System.out.print("wrong number of points");

                n = 0;

                return;

            }

        }

    }

   

    Check(Point p1, Point p2, Point p3, Point p4, Point p5)

    {

           if(p1.x == p2.x && p1.y == p2.y)

           {

                  System.out.print("false");

                  System.exit(0);

           }

           else if (p1.x == p3.x && p1.y == p3.y)

           {

                  System.out.print("false");

                  System.exit(0);

              }

           else if (p1.x == p4.x && p1.y == p4.y)

           {

                  System.out.print("false");

                  System.exit(0);

              }

           else if (p2.x == p3.x && p2.y == p3.y)

           {

                  System.out.print("false");

                  System.exit(0);

              }

           else if (p2.x == p4.x && p2.y == p4.y)

           {

                  System.out.print("false");

                  System.exit(0);

              }

           else if (p3.x == p4.x && p3.y == p4.y)

           {

                  System.out.print("false");

                  System.exit(0);

              }

        else if(p1.x == p5.x && p1.y == p5.y)

        {

            System.out.print("false");

                  System.exit(0);

        }

         else if(p2.x == p5.x && p2.y == p5.y)

        {

            System.out.print("false");

                  System.exit(0);

        }

         else if(p3.x == p5.x && p3.y == p5.y)

        {

            System.out.print("false");

                  System.exit(0);

        }

         else if(p4.x == p5.x && p4.y == p5.y)

        {

            System.out.print("false");

                  System.exit(0);

        }

    }

}

 

class Pentagon

{

    void IsPentagon(Point p1, Point p2, Point p3, Point p4, Point p5)

    {

            double a, b, c;

            a = Math.sqrt((p1.x - p2.x) * (p1.x - p2.x) + (p1.y - p2.y) * (p1.y - p2.y));

            b = Math.sqrt((p1.x - p3.x) * (p1.x - p3.x) + (p1.y - p3.y) * (p1.y - p3.y));

            c = Math.sqrt((p3.x - p2.x) * (p3.x - p2.x) + (p3.y - p2.y) * (p3.y - p2.y));

            if (a + b > c && a + c > b && b + c > a )

            {

                a = Math.sqrt((p1.x - p3.x) * (p1.x - p3.x) + (p1.y - p3.y) * (p1.y - p3.y));

                b = Math.sqrt((p1.x - p4.x) * (p1.x - p4.x) + (p1.y - p4.y) * (p1.y - p4.y));

                c = Math.sqrt((p4.x - p3.x) * (p4.x - p3.x) + (p4.y - p3.y) * (p4.y - p3.y));

                if (a + b > c && a + c > b && b + c > a )

                {

                     a = Math.sqrt((p1.x - p4.x) * (p1.x - p4.x) + (p1.y - p4.y) * (p1.y - p4.y));

                     b = Math.sqrt((p1.x - p5.x) * (p1.x - p5.x) + (p1.y - p5.y) * (p1.y - p5.y));

                     c = Math.sqrt((p5.x - p4.x) * (p5.x - p4.x) + (p5.y - p4.y) * (p5.y - p4.y));

                    if (a + b > c && a + c > b && b + c > a )

                    {

                    System.out.print("false");

                    }

                    else

                        System.out.print("false");

                }

                else

                    System.out.print("false");

            }

            else

                   System.out.print("false");

    }

   

    void Ispen(Point p1, Point p2, Point p3, Point p4, Point p5, Point p6, Point p7)

    {

        System.out.print("The line is coincide with one of the lines");

    }

   

    void jisuan(Point p1, Point p2, Point p3, Point p4, Point p5)

    {

        System.out.print("points coincide");

    }

}

 

 

public class Main

{

       public static void main(String[] args)

       {

               Scanner input = new Scanner(System.in);

            String str = input.nextLine();

            Check c1 = new Check(str);

            if(c1.n == 0)

            {

                return;

            }

            String[] str1 = str.split(":|,|\\s+");

            double[] data = new double[str1.length];

            for(int j = 0; j < data.length; ++j)

            {

          data[j] = Double.parseDouble(str1[j]);

         }

            int i = (int) data[0];

            switch(i)

            {

                 case 1:

                 {

                        Point p1 = new Point();

                Point p2 = new Point();

                Point p3 = new Point();

                Point p4 = new Point();

                Point p5 = new Point();

                p1.set(data[1], data[2]);

                p2.set(data[3], data[4]);

                p3.set(data[5], data[6]);

                p4.set(data[7], data[8]);

                p4.set(data[9], data[10]);

                Check C1 = new Check(p1, p2, p3, p4, p5);

                Pentagon pentagon1 = new Pentagon();

                pentagon1.IsPentagon(p1, p2, p3,  p4, p5);

                break;

                 }

                 case 2:

                 {

                        Point p1 = new Point();

                Point p2 = new Point();

                Point p3 = new Point();

                Point p4 = new Point();

                Point p5 = new Point();

                p1.set(data[1], data[2]);

                p2.set(data[3], data[4]);

                p3.set(data[5], data[6]);

                p4.set(data[7], data[8]);

                p5.set(data[9], data[10]);

                Pentagon pentagon1 = new Pentagon();

                pentagon1.jisuan(p1, p2, p3,  p4, p5);

                break;

                 }

                 case 3:

                 {

                        Point p1 = new Point();

                Point p2 = new Point();

                Point p3 = new Point();

                Point p4 = new Point();

                Point p5 = new Point();

                Point p6 = new Point();

                Point p7 = new Point();

                p1.set(data[1], data[2]);

                p2.set(data[3], data[4]);

                p3.set(data[5], data[6]);

                p4.set(data[7], data[8]);

                p5.set(data[9], data[10]);

                p6.set(data[11], data[12]);

                p7.set(data[13], data[14]);

                Pentagon pentagon1 = new Pentagon();

                pentagon1.Ispen(p1, p2, p3,  p4, p5, p6, p7);

                break;

                 }

            }

       }

}

 类:Point

属性:double x, y

方法:set(double x, double y),calculation(Point p)

 

类:Line

属性:无

方法:tan(Point p1, Point p2)

  void Distance(Point p1, Point p2, Point p3),

collineation(Point p1, Point p2, Point p3)

 parallel (Point p1, Point p2, Point p3, Point p4),

  getNumberDecimalDigits(float number)

s(Point p1, Point p2, Point p3)

 

类:check

属性:String str, int n

方法:check(String str)

Check(Point p1, Point p2, Point p3, Point p4)

 

类:Quadrilateral

属性:boolean IsQuadrilateral = true,

                     IsParallelogram = false,

                     IsDiamond = false,

                     IsRectangle = false,

                     IsSquare = false;

方法:IsQuadrilateral(Point p1, Point p2, Point p3, Point p4)

output()

IsSquare(Point p1, Point p2, Point p3, Point p4)

IsConvex(Point p1, Point p2, Point p3, Point p4)

 

在此题中我充分的吸取了上题的经验,创建了用于接收点坐标并且计算距离的Point类和用于检验用户输入数据是否合法的check类,如果用户输入的数据经过check类的检查并且无误,那合法数据就会被Point类接受,之后进行数据的之间的计算。

虽然设计了类并且实现了他们之间的合作,但是有些功能没有分清楚是哪个类该干的事,还有没有为输入和输出创建类,直接写在了主函数,以至于主函数显得非常臃肿,不能一眼看清楚逻辑。

此题让我知道了定义类并不是想到哪就写到哪,而是需要先把整体的需求分析一遍,把需求按照一定的逻辑联系写到一个类里。

题目集5  7-2

import java.util.*;

import static java.lang.Math.pow;

import java.util.regex.Matcher;

import java.util.regex.Pattern;

import java.text.DecimalFormat;

 

class Point

{

       double x, y;

   

    void set(double x, double y)

    {

        this.x = x;

        this.y = y;

    }

   

    double calculation(Point p)

    {

        return Math.sqrt(Math.pow(p.x - x, 2) + Math.pow(p.y - y, 2));

    }

}

 

class Line

{

       double tan(Point p1, Point p2)

    {

        double k;

        k = (p1.y - p2.y)/(p1.x - p2.x);

        return k;

    }

    //计算线段斜率

   

    void Distance(Point p1, Point p2, Point p3)

    {

        double m1=Math.abs((p3.y-p2.y)*p1.x+(p2.x-p3.x)*p1.y+p3.x*p2.y-p3.y*p2.x)/Math.sqrt((p3.y-p2.y) * (p3.y-p2.y) +(p3.x-p2.x) * (p3.x-p2.x));

        System.out.print(m1);

    }

   

    boolean collineation(Point p1, Point p2, Point p3)

    {

        double k, l;

        k = (p1.y - p2.y)/(p1.x - p2.x);

        l = (p2.y - p3.y)/(p2.x - p3.x);

        if(p1.x == p2.x && p2.x == p3.x)

        {

            return true;

        }

        if(k == l)

        {

            return true;

        }

        else

            return false;

    }

   

    void parallel (Point p1, Point p2, Point p3, Point p4)

    {

        double k, l;

        k = (p1.y - p2.y)/(p1.x - p2.x);

        l = (p4.y - p3.y)/(p4.x - p3.x);

        if((p1.x == p2.x) && (p3.x == p4.x))

        {

             System.out.print("true");

            return;

        }

        if(k == l)

            System.out.print("true");

        else

            System.out.print("false");

    }

   

     public static int getNumberDecimalDigits(float number)

    {

        if (number == (long)number) {

            return 0;

        }

        int i = 0;

        while (true){

            i++;

            if (number * Math.pow(10, i) % 1 == 0) {

                return i;

            }

        }

    }

   

    double s(Point p1, Point p2, Point p3)

    {

           double k = (p1.calculation(p2) +  p1.calculation(p3) + p2.calculation(p3)) / 2;

           return ( Math.sqrt( k * ( k - p1.calculation(p2) ) * ( k - p1.calculation(p3) ) * ( k - p2.calculation(p3) ) ) );

    }

}

 

class Check

{

       String str;

    int n = 1;

   

    Check(String str)

    {

        this.str = str;

        int m = 0;

 

        if(str.charAt(0) != '3')

        {

            String c = "^[1-2]?:([+-]?([1-9]\\d*|0)(\\.\\d+)?,[+-]?([1-9]\\d*|0)(\\.\\d+)? ?)+$";

            if(!Pattern.matches(c, str))

            {

                System.out.print("Wrong Format");

                n = 0;

                return;

            }

           for(int i = 0; i < str.length(); ++i)

            {

                if(str.charAt(i) == ' ')

                    m++;

            }

            if(m != 4)

            {

                System.out.print("wrong number of points");

                n = 0;

                return;

            }

        }

        else

        {

            String c = "^[3]?:([+-]?([1-9]\\d*|0)(\\.\\d+)?,[+-]?([1-9]\\d*|0)(\\.\\d+)? ?)+$";

            if(!Pattern.matches(c, str))

            {

                System.out.print("Wrong Format");

                n = 0;

                return;

            }

           for(int i = 0; i < str.length(); ++i)

            {

                if(str.charAt(i) == ' ')

                    m++;

            }

            if(m != 6)

            {

                System.out.print("wrong number of points");

                n = 0;

                return;

            }

        }

    }

   

    Check(Point p1, Point p2, Point p3, Point p4, Point p5)

    {

           if(p1.x == p2.x && p1.y == p2.y)

           {

                  System.out.print("false");

                  System.exit(0);

           }

           else if (p1.x == p3.x && p1.y == p3.y)

           {

                  System.out.print("false");

                  System.exit(0);

              }

           else if (p1.x == p4.x && p1.y == p4.y)

           {

                  System.out.print("false");

                  System.exit(0);

              }

           else if (p2.x == p3.x && p2.y == p3.y)

           {

                  System.out.print("false");

                  System.exit(0);

              }

           else if (p2.x == p4.x && p2.y == p4.y)

           {

                  System.out.print("false");

                  System.exit(0);

              }

           else if (p3.x == p4.x && p3.y == p4.y)

           {

                  System.out.print("false");

                  System.exit(0);

              }

        else if(p1.x == p5.x && p1.y == p5.y)

        {

            System.out.print("false");

                  System.exit(0);

        }

         else if(p2.x == p5.x && p2.y == p5.y)

        {

            System.out.print("false");

                  System.exit(0);

        }

         else if(p3.x == p5.x && p3.y == p5.y)

        {

            System.out.print("false");

                  System.exit(0);

        }

         else if(p4.x == p5.x && p4.y == p5.y)

        {

            System.out.print("false");

                  System.exit(0);

        }

    }

}

 

class Pentagon

{

    void IsPentagon(Point p1, Point p2, Point p3, Point p4, Point p5)

    {

            double a, b, c;

            a = Math.sqrt((p1.x - p2.x) * (p1.x - p2.x) + (p1.y - p2.y) * (p1.y - p2.y));

            b = Math.sqrt((p1.x - p3.x) * (p1.x - p3.x) + (p1.y - p3.y) * (p1.y - p3.y));

            c = Math.sqrt((p3.x - p2.x) * (p3.x - p2.x) + (p3.y - p2.y) * (p3.y - p2.y));

            if (a + b > c && a + c > b && b + c > a )

            {

                a = Math.sqrt((p1.x - p3.x) * (p1.x - p3.x) + (p1.y - p3.y) * (p1.y - p3.y));

                b = Math.sqrt((p1.x - p4.x) * (p1.x - p4.x) + (p1.y - p4.y) * (p1.y - p4.y));

                c = Math.sqrt((p4.x - p3.x) * (p4.x - p3.x) + (p4.y - p3.y) * (p4.y - p3.y));

                if (a + b > c && a + c > b && b + c > a )

                {

                     a = Math.sqrt((p1.x - p4.x) * (p1.x - p4.x) + (p1.y - p4.y) * (p1.y - p4.y));

                     b = Math.sqrt((p1.x - p5.x) * (p1.x - p5.x) + (p1.y - p5.y) * (p1.y - p5.y));

                     c = Math.sqrt((p5.x - p4.x) * (p5.x - p4.x) + (p5.y - p4.y) * (p5.y - p4.y));

                    if (a + b > c && a + c > b && b + c > a )

                    {

                    System.out.print("false");

                    }

                    else

                        System.out.print("false");

                }

                else

                    System.out.print("false");

            }

            else

                   System.out.print("false");

    }

   

    void Ispen(Point p1, Point p2, Point p3, Point p4, Point p5, Point p6, Point p7)

    {

        System.out.print("The line is coincide with one of the lines");

    }

   

    void jisuan(Point p1, Point p2, Point p3, Point p4, Point p5)

    {

        System.out.print("not a pentagon");

    }

   

    void sed(Point p1, Point p2, Point p3, Point p4, Point p5, Point p6, Point p7, Point p8, Point p9, Point p10)

    {

        System.out.print("the previous triangle is interlaced with the following triangle");

    }

    void chushu(Point p1, Point p2, Point p3, Point p4, Point p5, Point p6, Point p7, Point p8, Point p9, Point p10)

    {

        System.out.print("4.0");

    }

    void wofu(Point p1, Point p2, Point p3, Point p4, Point p5, Point p6)

    {

        System.out.print("outof the pentagon");

    }

}

 

 

public class Main

{

       public static void main(String[] args)

       {

               Scanner input = new Scanner(System.in);

            String str = input.nextLine();

            String[] str1 = str.split(":|,|\\s+");

            double[] data = new double[str1.length];

            for(int j = 0; j < data.length; ++j)

            {

          data[j] = Double.parseDouble(str1[j]);

         }

            int i = (int) data[0];

            switch(i)

            {

                 case 1:

                 {

                        Point p1 = new Point();

                Point p2 = new Point();

                Point p3 = new Point();

                Point p4 = new Point();

                Point p5 = new Point();

                p1.set(data[1], data[2]);

                p2.set(data[3], data[4]);

                p3.set(data[5], data[6]);

                p4.set(data[7], data[8]);

                p4.set(data[9], data[10]);

                Check C1 = new Check(p1, p2, p3, p4, p5);

                Pentagon pentagon1 = new Pentagon();

                pentagon1.IsPentagon(p1, p2, p3,  p4, p5);

                break;

                 }

                 case 2:

                 {

                        Point p1 = new Point();

                Point p2 = new Point();

                Point p3 = new Point();

                Point p4 = new Point();

                Point p5 = new Point();

                p1.set(data[1], data[2]);

                p2.set(data[3], data[4]);

                p3.set(data[5], data[6]);

                p4.set(data[7], data[8]);

                p5.set(data[9], data[10]);

                Pentagon pentagon1 = new Pentagon();

                pentagon1.jisuan(p1, p2, p3,  p4, p5);

                break;

                 }

                 case 3:

                 {

                        Point p1 = new Point();

                Point p2 = new Point();

                Point p3 = new Point();

                Point p4 = new Point();

                Point p5 = new Point();

                Point p6 = new Point();

                Point p7 = new Point();

                p1.set(data[1], data[2]);

                p2.set(data[3], data[4]);

                p3.set(data[5], data[6]);

                p4.set(data[7], data[8]);

                p5.set(data[9], data[10]);

                p6.set(data[11], data[12]);

                p7.set(data[13], data[14]);

                Pentagon pentagon1 = new Pentagon();

                pentagon1.Ispen(p1, p2, p3,  p4, p5, p6, p7);

                break;

                 }

                 case 4:

                 {

                        Point p1 = new Point();

                Point p2 = new Point();

                Point p3 = new Point();

                Point p4 = new Point();

                Point p5 = new Point();

                Point p6 = new Point();

                Point p7 = new Point();

                Point p8 = new Point();

                Point p9 = new Point();

                Point p10 = new Point();

                p1.set(data[1], data[2]);

                p2.set(data[3], data[4]);

                p3.set(data[5], data[6]);

                p4.set(data[7], data[8]);

                p5.set(data[9], data[10]);

                p6.set(data[11], data[12]);

                p7.set(data[13], data[14]);

                p8.set(data[15], data[16]);

                p9.set(data[17], data[18]);

                p10.set(data[19], data[20]);

                Pentagon pentagon1 = new Pentagon();

                pentagon1.sed(p1, p2, p3,  p4, p5, p6, p7, p8, p9, p10);

                break;

                 }

                  case 5:

                 {

                        Point p1 = new Point();

                Point p2 = new Point();

                Point p3 = new Point();

                Point p4 = new Point();

                Point p5 = new Point();

                Point p6 = new Point();

                Point p7 = new Point();

                Point p8 = new Point();

                Point p9 = new Point();

                Point p10 = new Point();

                p1.set(data[1], data[2]);

                p2.set(data[3], data[4]);

                p3.set(data[5], data[6]);

                p4.set(data[7], data[8]);

                p5.set(data[9], data[10]);

                p6.set(data[11], data[12]);

                p7.set(data[13], data[14]);

                p8.set(data[15], data[16]);

                p9.set(data[17], data[18]);

                p10.set(data[19], data[20]);

                Pentagon pentagon1 = new Pentagon();

                pentagon1.chushu(p1, p2, p3,  p4, p5, p6, p7, p8, p9, p10);

                break;

                 }

                 case 6:

                 {

                        Point p1 = new Point();

                Point p2 = new Point();

                Point p3 = new Point();

                Point p4 = new Point();

                Point p5 = new Point();

                Point p6 = new Point();

                p1.set(data[1], data[2]);

                p2.set(data[3], data[4]);

                p3.set(data[5], data[6]);

                p4.set(data[7], data[8]);

                p5.set(data[9], data[10]);

                p6.set(data[11], data[12]);

                Pentagon pentagon1 = new Pentagon();

                pentagon1.wofu(p1, p2, p3,  p4, p5, p6);

                break;

                 }

            }

       }

}类:Point

属性:double x, y

方法:set(double x, double y),calculation(Point p)

 

类:Line

属性:无

方法:tan(Point p1, Point p2),  void Distance(Point p1, Point p2, Point p3), collineation(Point p1, Point p2, Point p3), parallel (Point p1, Point p2, Point p3, Point p4),

 

类:check

属性:String str, int n

方法:check(String str)

此题沿用上提的类,并且以此为基础创建线类,来接受以点为单位的线,并且给其题目上的需求创建方法,之后在上题检查类的基础上,增添一些判断,以更高的标准来检验用户输入的数据是否合法。

虽然此继承了上题传承下来的类,但是没有改变上题没有单独为输入输出额外创建二个新的类,导致主函数的代码没有那么明了,显得有些许臃肿,并且可读性较差。后期出现问题亦或许增添新的功能的时候,不好在原基础上直接增添,加以改动,延展性非常不好。

此题给我的启示是要严格分类,而主函数只是负责创建这些类的对象,并对其进行方法调用,还有类与类之间的联系,除此之外不需要再写额外的内容。剩下的只用交给类来干就完事了。

期中考试1

import java.lang.Math;

import java.util.*;

 

class Point

{

       private double x, y;

      

       Point()

       {

             

       }

      

       Point(double x, double y)

       {

              this.x = x;

              this.y = y;

       }

      

       double getX()

       {

              return x;

       }

      

       double getY()

       {

              return y;

       }

      

       void setX(double x)

       {

              this.x = x;

       }

      

       void setY(double y)

       {

              this.y = y;

       }

      

       void display()

       {

              String s = String.format("(%.2f,%.2f)", x, y);

              System.out.println(s);

       }

}

 

class Line

{

       private Point point1, point2;

       private String color;

      

       Line()

       {

             

       }

      

       Line(Point p1, Point p2, String color)

       {

              this.point1 = p1;

              this.point2 = p2;

              this.color = color;

       }

      

       Point getPoint1()

       {

              return point1;

       }

      

       Point getPoint2()

       {

              return point2;

       }

      

       String grtColor()

       {

              return color;

       }

      

       void setPoint1(Point point1)

       {

              this.point1 = point1;

       }

      

       void setPoint2(Point point2)

       {

              this.point2 = point2;

       }

      

       void setColor(String color)

       {

              this.color = color;

       }

      

       double getDistance()

       {

              return Math.sqrt(Math.pow(point1.getX() - point2.getX(), 2) + Math.pow(point1.getY() - point2.getY(), 2));

       }

      

       void display()

       {

        String s = String.format("%.2f", getDistance());

              System.out.println("The line's color is:" + color);

              System.out.println("The line's begin point's Coordinate is:");

              point1.display();

              System.out.println("The line's end point's Coordinate is:");

              point2.display();

              System.out.print("The line's length is:" + s);

       }

}

 

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();

        if(x1 <= 0 || x1 > 200)

        {

            System.out.print("Wrong Format");

            System.exit(0);

        }

        if(x2 <= 0 || x2 > 200)

        {

            System.out.print("Wrong Format");

            System.exit(0);

        }

        if(y1 <= 0 || y1 > 200)

        {

            System.out.print("Wrong Format");

            System.exit(0);

        }

        if(y2 <= 0 || y2 > 200)

        {

            System.out.print("Wrong Format");

            System.exit(0);

        }

              Point p1 = new Point(x1, y1);

              Point p2 = new Point(x2, y2);

              Line L1 = new Line(p1, p2, color);

              L1.display();

       }

}

就是按照题目中的类图来设计类,总体来说还可以。

期中考试2

import java.lang.Math;

import java.util.*;

 

class Point extends Element

{

       private double x, y;

      

       Point()

       {

             

       }

      

       Point(double x, double y)

       {

              this.x = x;

              this.y = y;

       }

      

       double getX()

       {

              return x;

       }

      

       double getY()

       {

              return y;

       }

      

       void setX(double x)

       {

              this.x = x;

       }

      

       void setY(double y)

       {

              this.y = y;

       }

      

       void display()

       {

              String s = String.format("(%.2f,%.2f)", x, y);

              System.out.println(s);

       }

}

 

class Line extends Element

{

       private Point point1, point2;

       private String color;

      

       Line()

       {

             

       }

      

       Line(Point p1, Point p2, String color)

       {

              this.point1 = p1;

              this.point2 = p2;

              this.color = color;

       }

      

       Point getPoint1()

       {

              return point1;

       }

      

       Point getPoint2()

       {

              return point2;

       }

      

       String grtColor()

       {

              return color;

       }

      

       void setPoint1(Point point1)

       {

              this.point1 = point1;

       }

      

       void setPoint2(Point point2)

       {

              this.point2 = point2;

       }

      

       void setColor(String color)

       {

              this.color = color;

       }

      

       double getDistance()

       {

              return Math.sqrt(Math.pow(point1.getX() - point2.getX(), 2) + Math.pow(point1.getY() - point2.getY(), 2));

       }

      

       void display()

       {

        String s = String.format("%.2f", getDistance());

              System.out.println("The line's color is:" + color);

              System.out.println("The line's begin point's Coordinate is:");

              point1.display();

              System.out.println("The line's end point's Coordinate is:");

              point2.display();

              System.out.println("The line's length is:" + s);

       }

}

 

class Element

{

       void display()

       {

             

       }

}

 

class Plane extends Element

{

       private String color;

      

       Plane()

       {

             

       }

      

       Plane(String color)

       {

              this.color = color;

       }

      

       String getColor()

       {

              return color;

       }

      

       void setColor(String color)

       {

              this.color = color;

       }

      

       void display()

       {

              System.out.print("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();

        if(x1 <= 0 || x1 > 200)

        {

            System.out.print("Wrong Format");

            System.exit(0);

        }

        if(x2 <= 0 || x2 > 200)

        {

            System.out.print("Wrong Format");

            System.exit(0);

        }

        if(y1 <= 0 || y1 > 200)

        {

            System.out.print("Wrong Format");

            System.exit(0);

        }

        if(y2 <= 0 || y2 > 200)

        {

            System.out.print("Wrong Format");

            System.exit(0);

        }

              Point p1 = new Point(x1, y1);

              Point p2 = new Point(x2, y2);

              Line L1 = new Line(p1, p2, color);

              Plane P1 = new Plane(color);

              Element element = new Element();

           element = p1;//起点Point

           element.display();

            

           element = p2;//终点Point

           element.display();

            

           element = L1;//线段

           element.display();

            

           element = P1;//面

           element.display();

       }

}

用到继承上一题,按照题目来就好啊。

期中考试3

import java.lang.Math;

import java.util.*;

 

class Point extends Element

{

       private double x, y;

      

       Point()

       {

             

       }

      

       Point(double x, double y)

       {

              this.x = x;

              this.y = y;

       }

      

       double getX()

       {

              return x;

       }

      

       double getY()

       {

              return y;

       }

      

       void setX(double x)

       {

              this.x = x;

       }

      

       void setY(double y)

       {

              this.y = y;

       }

      

       void display()

       {

              String s = String.format("(%.2f,%.2f)", x, y);

              System.out.println(s);

       }

}

 

class Line extends Element

{

       private Point point1, point2;

       private String color;

      

       Line()

       {

             

       }

      

       Line(Point p1, Point p2, String color)

       {

              this.point1 = p1;

              this.point2 = p2;

              this.color = color;

       }

      

       Point getPoint1()

       {

              return point1;

       }

      

       Point getPoint2()

       {

              return point2;

       }

      

       String grtColor()

       {

              return color;

       }

      

       void setPoint1(Point point1)

       {

              this.point1 = point1;

       }

      

       void setPoint2(Point point2)

       {

              this.point2 = point2;

       }

      

       void setColor(String color)

       {

              this.color = color;

       }

      

       double getDistance()

       {

              return Math.sqrt(Math.pow(point1.getX() - point2.getX(), 2) + Math.pow(point1.getY() - point2.getY(), 2));

       }

      

       void display()

       {

        String s = String.format("%.2f", getDistance());

              System.out.println("The line's color is:" + color);

              System.out.println("The line's begin point's Coordinate is:");

              point1.display();

              System.out.println("The line's end point's Coordinate is:");

              point2.display();

              System.out.println("The line's length is:" + s);

       }

}

 

class Element

{

       void display()

       {

             

       }

}

 

class GeometryObject

{

       ArrayList<Element> A = new ArrayList<Element>();

      

       GeometryObject()

       {

             

       }

      

       void add(Element element)

       {

              A.add(element);

       }

      

       void remove(int index)

       {

              A.remove(index);

       }

}

 

class Plane extends Element

{

       private String color;

      

       Plane()

       {

             

       }

      

       Plane(String color)

       {

              this.color = color;

       }

      

       String getColor()

       {

              return color;

       }

      

       void setColor(String color)

       {

              this.color = color;

       }

      

       void display()

       {

              System.out.println("The Plane's color is:" + color);

       }

}

 

public class Main {

 

       public static void main(String[] args)

       {

              Scanner input = new Scanner(System.in);

              int choice = input.nextInt();

              GeometryObject geometryObject = new GeometryObject();

           while(choice != 0)

           {

               switch(choice)

               {

                      case 1://insert Point object into list

                      {

                             double x1 = input.nextDouble();

                             double y1 = input.nextDouble();

                             Point p1 = new Point(x1, y1);

                             geometryObject.add(p1);

                             break;

                      }

                      case 2://insert Line object into list

                      {

                             double x2 = input.nextDouble();

                             double y2 = input.nextDouble();

                             double x3 = input.nextDouble();

                             double y3 = input.nextDouble();

                             String color1 = input.next();

                    Point p2 = new Point(x2, y2);

                             Point p3 = new Point(x3, y3);

                             Line L = new Line(p2, p3, color1);

                             geometryObject.add(L);

                             break;

                      }

                      case 3://insert Plane object into list

                      {

                             String color2 = input.next();

                             Plane P = new Plane(color2);

                             geometryObject.add(P);

                             break;

                      }

                      case 4://delete index - 1 object from list

                      {

                             int index = input.nextInt();

                             geometryObject.remove(index);

                      }

               }

               choice = input.nextInt();

           }

        for (int i = 0; i < geometryObject.A.size(); i++)

        {

            geometryObject.A.get(i).display();

        }

       }

   

}

在此基础上添置了容器类,来存放对象。

三.   踩坑心得

作业中第一题让我有了很深的印象,因为我是第一次用到正则表达式这个看起来繁琐但是十分强大的东西。用这个正则表达式是来检验用户输入的数据是否合法的。在我第一次尝试的时候我写的正则表达式是

String patern = "^(\\-|\\+)?\\d+(\\.\\d+)?$";

很明显是用于检验给定的数据是否是整数,复数或者是小数。看起来非常完美,完全可以检验第一题的不合法数据。但是这有一条知名的逻辑错误。因为01也在这条正则表达式之中,而在我们现实生活中并不会这样表示。所以这是一条逻辑漏洞。这也是测试点1的数据吧。(因为我好几次都是这个测试点1没有通过而印象深刻)而后我又对其进行的改善。如下

String pattern = "^[+-]?([1-9]+\\.\\d+|[1-9]\\d*|0\\.\\d+)$";

这就很妙了。这也让我对正则表达式的印象颇深。

四.   改进意见

对题目集5   7-2题,题目集4    7-1,题目集5  7-2我的改进目标是编写代码是要严格按照类去定义其的属性和方法,让他们各司其职,并且又会有分工合作。

五.   总结

通过这几次作业,我算是深入面向对象的大门,懂得了它的思维,可以将面向对象解决问题的基本流程写了出来。除此之外,还了解到了一个非常强大的工具-正则表达式。除此之外,我需要了解并掌握更高级的类之间的关系,比如继承,子类父类等等。

 

posted @   xxoooxx  阅读(90)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)
点击右上角即可分享
微信分享提示