java pta前三次作业总结

前言:

三次题目,前两次感觉很简单,但是可能是好久都没有敲代码了,只能说还是写的挺艰难的,花了好长时间啊!!!一边翻书复健一边慢慢的写 但是只能说结果还是不错啊,正确率还是挺高的,就是多多少少有一些小问题,很难解决,第三次作业就是跟老师说的一样难度徒然增长啊,受制于我的数学知识更是忘得差不多了,所以说很艰难/(ㄒoㄒ)/~~ ,关于题量第一次还是挺多的,后两次都只有3道题,但是难度这方面就(流汗)。。。,写代码最困难的就是把之前的面向过程的思考方式,更改成我们需要的面向对象的思考方式,花了还是挺长时间的。

设计与分析:

7-2 串口字符解析:

RS232是串口常用的通信协议,在异步通信模式下,串口可以一次发送5~8位数据,收发双方之间没有数据发送时线路维持高电平,相当于接收方持续收到数据“1”(称为空闲位),发送方有数据发送时,会在有效数据(5~8位,具体位数由通信双方提前设置)前加上1位起始位“0”,在有效数据之后加上1位可选的奇偶校验位和1位结束位“1”。请编写程序,模拟串口接收处理程序,注:假定有效数据是8位,奇偶校验位采用奇校验。

输入格式:

由0、1组成的二进制数据流。例如:11110111010111111001001101111111011111111101111

输出格式:

过滤掉空闲、起始、结束以及奇偶校验位之后的数据,数据之前加上序号和英文冒号。
如有多个数据,每个数据单独一行显示。
若数据不足11位或者输入数据全1没有起始位,则输出"null data",
若某个数据的结束符不为1,则输出“validate error”。
若某个数据奇偶校验错误,则输出“parity check error”。
若数据结束符和奇偶校验均不合格,输出“validate error”。
如:11011或11111111111111111。
例如:
1:11101011
2:01001101
3:validate error

我的代码如下:

import java.util.Scanner;

public class Main {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Scanner input = new Scanner(System.in);
        int n = 1;
        int sum = 0;
        String a = input.next();
        if(a.length()<11)
            {
                System.out.print("null data");
                return;
            }
            if(a.indexOf('0')<0)
            {
                System.out.print("null data");
                return;
            }
            
            
            
            
            for(int i=0;i<a.length()-10;i++)
            {
                if(a.charAt(i)=='0')
                {
                    sum=0;
                    for(int f=i+1;f<i+9;f++)
                    {
                        
                        if(a.charAt(f)=='1') 
                            sum++;
                        
                    }
                
                    if(a.charAt(i+10)!='1')
                        {
                        System.out.print(n+":");
                        System.out.print("validate error");
                        
                        }//1110111111111110111111101110111111110111
                    else if(sum%2==0&&a.charAt(i+9)!='1'||sum%2!=0&&a.charAt(i+9)!='0')
                        {
                        System.out.print(n+":");
                        System.out.print("parity check error");
                        }
                    else
                        {
                        System.out.print(n+":");
                        for(int f=i+1;f<i+9;f++)
                            {
                            System.out.print(a.charAt(f));
                            }
                        }
                    if(n>=1)
                        System.out.print("\n");
                    n++;
                    i=i+10;
                    
                }
            }
        
            }
            
}
//找0,不是10     奇偶判断

这道题一个人,一个键盘,坐一下午,很难写啊感觉

看的不是很懂这个软件,但是我自己认为这道题我还是写的还是蛮简洁的!、

一开始没太读懂这道题的含义,耽搁了很长的时间,主要运用的字符串的各种应用和范围的确定,这道题的关键就是把一大长串分割为小的部分然后再进行比对

 

 

 

题目集三,需要用到正则表达式,从没接触过的领域,又是漫长的学习

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) {
        Scanner input = new Scanner(System.in);
        String quan = input.nextLine();
        String num[] = null;
        String []point = quan.split(" ");
        for(String i:point) 
        {
            num = i.split(",");
            for(String j:num) 
                if(!j.matches("^[+-]?(0|(0\\.\\d+)?|[1-9][0-9]*(\\.\\d+)?)$")) 
                    {
                    System.out.print("Wrong Format");
                    return;
                }
            
        } 
        
        if(point.length!=2)
        {
            System.out.print("wrong number of points");
            return;
        }
        
        num = point[0].split(",");
        点 a = new 点(Double.valueOf(num[0]),Double.valueOf(num[1]));
        num = point[1].split(",");          
        
        点 b = new 点(Double.valueOf(num[0]),Double.valueOf(num[1]));
        
        System.out.print(a.距离(b));
        
        
}
}
    





class 点 {
    double sum;
    Scanner input = new Scanner(System.in);
    double x;
    double y;
    public 点(double x,double y)
    {
        this.x=x;
        this.y=y;
    }
    
    double 距离(点  a)
    {
        
        return Math.sqrt((this.x-a.x)*(this.x-a.x)+(this.y-a.y)*(this.y-a.y));
    }  
    boolean 重合(点  a)
    {
        return this.x==a.x&&this.y==a.y;
    }
}

主要还是用面向对象的思维和正则表达式格式的建立,数学思维没有难点,建立了点的类,为了下两题奠定基础

 

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) {
        Scanner input = new Scanner(System.in);
        
        String quan = input.nextLine();
        if(quan.charAt(1)!=':')
        {
            System.out.print("Wrong Format");
            return;
        }
        String[] n= quan.split(":");
        String num[] = null;
        String []point = n[1].split(" ");
        
        
        if(!n[0].matches("[0-5]"))
        {
            System.out.print("Wrong Format");
            return;
        }
        
        if(quan.charAt(1)!=':')
        {
            System.out.print("Wrong Format");
            return;
        }
        for(int i=0;i<point.length;i++) 
        {   
            num = point[i].split(",");
            if(num.length!=2)
            {
                System.out.print("Wrong Format");
                return;
            }    
            //System.out.print(num.length+"\n");
            for(int j=0;j<num.length;j++) 
                if(!num[j].matches("^[+-]?(0|(0\\.\\d+)?|[1-9][0-9]*(\\.\\d+)?)$")) 
                    {
                    System.out.print("Wrong Format");
                    return;
                }
            
        } 
        if(n[0].charAt(0)=='1')
        {
        if(point.length!=2)
        {
            System.out.print("wrong number of points");
            return;
        }
        num = point[0].split(",");
        point a = new point(Double.valueOf(num[0]),Double.valueOf(num[1]));
        num = point[1].split(",");
        point b = new point(Double.valueOf(num[0]),Double.valueOf(num[1]));
        线 l1 = new 线(a,b);
        l1.斜率(a, b);
        return;
        }
        if(n[0].charAt(0)=='2')
        {
            if(point.length!=3)
            {
                System.out.print("wrong number of points");
                return;
            }
        num = point[0].split(",");
        point a = new point(Double.valueOf(num[0]),Double.valueOf(num[1]));
        num = point[1].split(",");
        point b = new point(Double.valueOf(num[0]),Double.valueOf(num[1]));
        num = point[2].split(",");
        point c = new point(Double.valueOf(num[0]),Double.valueOf(num[1]));
        线 l2 = new 线(b,c);
        l2.垂直距离(a, b, c);
        return;
        }
        if(n[0].charAt(0)=='3')
        {
            if(point.length!=3)
            {
                System.out.print("wrong number of points");
                return;
            }
            num = point[0].split(",");
            point a = new point(Double.valueOf(num[0]),Double.valueOf(num[1]));
            num = point[1].split(",");
            point b = new point(Double.valueOf(num[0]),Double.valueOf(num[1]));
            num = point[2].split(",");
            point c = new point(Double.valueOf(num[0]),Double.valueOf(num[1]));
            线 l3 = new 线(a,b);
            线 l4 = new 线(b,c);
            l3.在同一线上(a, b, c);
            return;
        }
         

        
        if(n[0].charAt(0)=='4')
        {
            if(point.length!=4)
            {
                System.out.print("wrong number of points");
                return;
            }
        num = point[0].split(",");
        point a = new point(Double.valueOf(num[0]),Double.valueOf(num[1]));
        num = point[1].split(",");
        point b = new point(Double.valueOf(num[0]),Double.valueOf(num[1]));
        num = point[2].split(",");
        point c = new point(Double.valueOf(num[0]),Double.valueOf(num[1]));
        num = point[3].split(",");
        point d = new point(Double.valueOf(num[0]),Double.valueOf(num[1]));
        线 l5 = new 线(a,b);
        线 l6 = new 线(c,d);
         if(a.重合(b)||b.重合(c)||c.重合(d)||d.重合(a)) 
         {
             System.out.println("points coincide");
             return;
           }
        if(l5.平行(a, b, c, d))
        {
        System.out.print("true");
        return;
        }
        else
        {
            System.out.print("false");
        return;
        }
        
        }
        if(n[0].charAt(0)=='5')
        {
            if(point.length!=4)
            {
                System.out.print("wrong number of points");
                return;
            }
            num = point[0].split(",");
            point a = new point(Double.valueOf(num[0]),Double.valueOf(num[1]));
            num = point[1].split(",");
            point b = new point(Double.valueOf(num[0]),Double.valueOf(num[1]));
            num = point[2].split(",");
            point c = new point(Double.valueOf(num[0]),Double.valueOf(num[1]));
            num = point[3].split(",");
            point d = new point(Double.valueOf(num[0]),Double.valueOf(num[1]));
            if(a.重合(b)||b.重合(c)||c.重合(d)||d.重合(a)) 
             {
                 System.out.println("points coincide");
                 return;
               }
            线 l7 = new 线(a,b);
            l7.交叉点(a, b, c, d);
            
            
        }
        
        
}

}


class 线 {
    private point x;
    private point y;
    private point z;
    private point q;
    public 线(point x,point y)
    {
        this.x=x;
        this.y=y;
                
    }
    void 斜率(point x,point y)
    {
        if(x.重合(y))
        {
            System.out.print("points coincide");
            return;
        }
        
        else if(x.x==y.x)
        {
            System.out.print("Slope does not exist");
            return;
        }
        else
            System.out.print((y.y-x.y)/(y.x-x.x));
        return ;
        
    }
    
    void 垂直距离(point x,point y,point z)
    {
        double result;
        double k;
        double b;
        if(y.重合(z)||x.重合(y)||x.重合(z))
        {
            System.out.print("points coincide");
            return;
        }
        if(y.y==z.y)
            
        {
            result=Math.abs(x.y-y.y);
            System.out.print(result);
            return;
        }
        else if(y.x==z.x)
        
    {
        result=Math.abs(x.x-y.x);
        System.out.print(result);
        return;
    }
        else
        {
            k=(y.y-z.y)/(y.x-z.x);
            b=y.y-k*y.x;
            result = Math.abs((x.y-y.y)*z.x+(y.x-x.x)*z.y+x.x*y.y-x.y*y.x)/Math.sqrt((x.y-y.y)*(x.y-y.y)+(x.x-y.x)*(x.x-y.x));
            System.out.print(result);
            return;
        }
        
    }
    
     boolean 平行(point x,point y,point z,point q)
    {
        return ((y.y-x.y)/(y.x-x.x)==(q.y-z.y)/(q.x-z.x));
    }
    
      void 在同一线上(point x,point y,point z)
     {
         if(x.重合(y)||y.重合(z)||x.重合(z)) 
         {
             System.out.println("points coincide");
             return;
           }
         
         else
         {
             double l1=(y.y-x.y)/(y.x-x.x);
             double l2=(z.y-y.y)/(z.x-y.x);
             
             if(l1==l2) {
                 System.out.println("true");
             }
             else {
                 System.out.println("false");
             }
             return;
         }
        
         
     }
    
    void 交叉点(point x,point y,point z,point q)
    {        
        double k1,k2;
        double b1,b2;
        point op = new point(((z.x-q.x)*(x.y*y.x-x.x*y.y)-(x.x-y.x)*(z.y*q.x-z.x*q.y))/((y.y-x.y)*(q.x-z.x)-(y.x-x.x)*(q.y-z.y)),((z.y-q.y)*(x.y*y.x-x.x*y.y)-(x.y-y.y)*(z.y*q.x-z.x*q.y))/((y.y-x.y)*(q.x-z.x)-(y.x-x.x)*(q.y-z.y)));
        if((y.y-x.y)/(y.x-x.x)==(q.y-z.y)/(q.x-z.x))
        {
            System.out.print("is parallel lines,have no intersection point");
            return ;
        }
        else if(y.x==x.x&&z.x==q.x)
        {
            System.out.print("is parallel lines,have no intersection point");
            return ;
        }
        else
        {
            
            System.out.print(op.x+","+op.y);
            double a1 = Math.max(x.x, y.x);
            double a2 = Math.max(z.x, q.x);
            double i1 = Math.min(x.x, y.x);
            double i2 = Math.min(z.x, q.x);
            if ((((z.x-q.x)*(x.y*y.x-x.x*y.y)-(x.x-y.x)*(z.y*q.x-z.x*q.y))/((y.y-x.y)*(q.x-z.x)-(y.x-x.x)*(q.y-z.y)) > i1 || ((z.x-q.x)*(x.y*y.x-x.x*y.y)-(x.x-y.x)*(z.y*q.x-z.x*q.y))/((y.y-x.y)*(q.x-z.x)-(y.x-x.x)*(q.y-z.y)) > i2) && (((z.x-q.x)*(x.y*y.x-x.x*y.y)-(x.x-y.x)*(z.y*q.x-z.x*q.y))/((y.y-x.y)*(q.x-z.x)-(y.x-x.x)*(q.y-z.y)) < a2 || ((z.x-q.x)*(x.y*y.x-x.x*y.y)-(x.x-y.x)*(z.y*q.x-z.x*q.y))/((y.y-x.y)*(q.x-z.x)-(y.x-x.x)*(q.y-z.y)) < a1)) 
            {
                System.out.println(" " + true);
            } else 
            {
                System.out.println(" " + false);
            }
            return;
        }
        
        
    }
    
}

class point {
    double sum;
    
    double x;
    double y;
    public point(double x,double y)
    {
        this.x=x;
        this.y=y;
    }
    
    double 距离(point  a)
    {
        
        return Math.sqrt((this.x-a.x)*(this.x-a.x)+(this.y-a.y)*(this.y-a.y));
    }  
    boolean 重合(point  a)
    {
        return this.x==a.x&&this.y==a.y;
    }
     
}

在上一题的基础上加上的线的类主要还是格式的确定,和数学表达式上面太久没用了,想了很久,斜率这方面需要考虑更多情况;

 

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;
import java.util.Arrays;

public class Main {

    public static void main(String[] args) {
    Scanner input = new Scanner(System.in);    
        String quan = input.nextLine();
        if(quan.charAt(1)!=':')
        {
            System.out.print("Wrong Format");
            return;
        }
        String[] n= quan.split(":");
        String num[] = null;
        String []point = n[1].split(" ");
        
        
        if(!n[0].matches("[0-5]"))
        {
            System.out.print("Wrong Format");
            return;
        }
        
        for(int i=0;i<point.length;i++) 
        {   
            num = point[i].split(",");
            if(num.length!=2)
            {
                System.out.print("Wrong Format");
                return;
            }
            for(int j=0;j<num.length;j++) 
                if(!num[j].matches("^[+-]?(0|(0\\.\\d+)?|[1-9][0-9]*(\\.\\d+)?)$")) 
                {
                    System.out.print("Wrong Format");
                    return;
                }    
        }
        if(n[0].charAt(0)=='1')
        {
            if(point.length!=3)
            {
                System.out.print("wrong number of points");
                return;
            }
            num = point[0].split(",");
            point a = new point(Double.valueOf(num[0]),Double.valueOf(num[1]));
            num = point[1].split(",");
            point b = new point(Double.valueOf(num[0]),Double.valueOf(num[1]));
            num = point[2].split(",");
            point c = new point(Double.valueOf(num[0]),Double.valueOf(num[1]));
            角 o = new 角(a,b,c);
            o.等腰或等边(a, b, c);
            
            return;
        }
        if(n[0].charAt(0)=='2')
        {
            if(point.length!=3)
            {
                System.out.print("wrong number of points");
                return;
            }
            num = point[0].split(",");
            point a = new point(Double.valueOf(num[0]),Double.valueOf(num[1]));
            num = point[1].split(",");
            point b = new point(Double.valueOf(num[0]),Double.valueOf(num[1]));
            num = point[2].split(",");
            point c = new point(Double.valueOf(num[0]),Double.valueOf(num[1]));
            角 o1 = new 角(a,b,c);
            o1.参数(a, b, c);
            return;
        }
        if(n[0].charAt(0)=='3')
        {
            if(point.length!=3)
            {
                System.out.print("wrong number of points");
                return;
            }
            num = point[0].split(",");
            point a = new point(Double.valueOf(num[0]),Double.valueOf(num[1]));
            num = point[1].split(",");
            point b = new point(Double.valueOf(num[0]),Double.valueOf(num[1]));
            num = point[2].split(",");
            point c = new point(Double.valueOf(num[0]),Double.valueOf(num[1]));
            角 o2 = new 角(a,b,c);
            o2.什么类型三角形(a, b, c);
            return;
        }
        
        
}

}


class 角 {
    private point x;
    private point y;
    private point z;
    public 角(point x,point y,point z)
    {
        this.x=x;
        this.y=y;
        this.z=z;
    }
    
    void 等腰或等边(point x,point y,point z)
    {
        double n=x.距离(y);
        double m=x.距离(z);
        double l=z.距离(y);
        线 l1=new 线(x, y);
        
        if(l1.在同一线上(x, y, z))
        {
            
            return;
        }
        if(!(n+m>l)||!(m+l>n)||!(m+l>n)||!(m-n<l)||!(n-l<m)||!(l-m<n))
         {
         System.out.print("data error");
         return;
         }
        if(n==m||m==l||n==l)
        {
            System.out.print("true ");
        }
        else
            System.out.print("false ");
         if(n==m&&m==l&&l==n)
         {
             System.out.print("true");
             return;
         }
         else 
         {
             System.out.print("false");
             return;
         }
    }
//+" "+s+" "+a.x+","+a.y
    void 参数(point x,point y,point z)
    {
        double n=x.距离(y);
        double m=x.距离(z);
        double l=z.距离(y);
        float Perimeter= (float) ((float)n+m+l);
        float p=(float)(n+m+l)/2;
        float s=(float)Math.sqrt(p*(p-n)*(p-m)*(p-l));
        point  a=new point((x.x+y.x+z.x)/3,(x.y+y.y+z.y)/3);
        System.out.print(Perimeter+" "+s+" "+a.x+","+a.y);
        
    }
    void 什么类型三角形(point x,point y,point z)
    {
        double n=x.距离(y);
        double m=x.距离(z);
        double l=z.距离(y);
        线 l1=new 线(x, y);
        if(l1.在同一线上(x, y, z))
        {
            return;
        }
        if(!(n+m>l)||!(m+l>n)||!(m+l>n)||!(m-n<l)||!(n-l<m)||!(l-m<n))
         {
         System.out.print("data error");
         return;
         }
        sort(n,m,l);
        if(m*m+n*n-l*l<0.00001)
        {
            System.out.print("false true false");
        }
        else if(m*m+l*l-n*n/2*m*l>0)
            System.out.print("true false false");
        else
            System.out.print("false false true");
            
    }

     void sort(double n, double m, double l) {
         n=1;m=3;l=2;
        if(n<m) {
            double temp=n;
            n=m;
            m=temp;
        }
        if(n<l) {
            double temp=n;
            n=l;
            l=temp;
        }
            
        }


        
}

class point {
        double x;
        double y;
        public point(double x,double y)
        {
            this.x=x;
            this.y=y;
        }
        
        double 距离(point  a)
        {
            
            return Math.sqrt((this.x-a.x)*(this.x-a.x)+(this.y-a.y)*(this.y-a.y));
        }  
        boolean 重合(point  a)
        {
            return this.x==a.x&&this.y==a.y;
        }
         
    }


    



 class 线 {
    private point x;
    private point y;
    private point z;
    private point q;
    public 线(point x,point y)
    {
        this.x=x;
        this.y=y;
                
    }
    void 斜率(point x,point y)
    {
        if(x.重合(y))
        {
            System.out.print("points coincide");
            return;
        }
        
        else if(x.x==y.x)
        {
            System.out.print("Slope does not exist");
            return;
        }
        else
            System.out.print((y.y-x.y)/(y.x-x.x));
        return ;
        
    }
    
    void 垂直距离(point x,point y,point z)
    {
        double result;
        double k;
        double b;
        if(y.重合(z)||x.重合(y)||x.重合(z))
        {
            System.out.print("points coincide");
            return;
        }
        if(y.y==z.y)
            
        {
            result=Math.abs(x.y-y.y);
            System.out.print(result);
            return;
        }
        else if(y.x==z.x)
        
    {
        result=Math.abs(x.x-y.x);
        System.out.print(result);
        return;
    }
        else
        {
            k=(y.y-z.y)/(y.x-z.x);
            b=y.y-k*y.x;
            result = Math.abs((x.y-y.y)*z.x+(y.x-x.x)*z.y+x.x*y.y-x.y*y.x)/Math.sqrt((x.y-y.y)*(x.y-y.y)+(x.x-y.x)*(x.x-y.x));
            System.out.print(result);
            return;
        }
        
    }
    
     boolean 平行(point x,point y,point z,point q)
    {
        return ((y.y-x.y)/(y.x-x.x)==(q.y-z.y)/(q.x-z.x));
    }
    
     boolean 在同一线上(point x,point y,point z)
     {
         if(x.重合(y)||y.重合(z)||x.重合(z)) 
         {
             System.out.println("date error");
             return true;
           }
        
         else
         {
             double l1=(y.y-x.y)/(y.x-x.x);
             double l2=(z.y-y.y)/(z.x-y.x);
             
             if(l1==l2) {
                 System.out.println("data error");
                 return true;
             }
             return false;
         }
        
         
     }
    
    void 交叉点(point x,point y,point z,point q)
    {        
        double k1,k2;
        double b1,b2;
        point op = new point(((z.x-q.x)*(x.y*y.x-x.x*y.y)-(x.x-y.x)*(z.y*q.x-z.x*q.y))/((y.y-x.y)*(q.x-z.x)-(y.x-x.x)*(q.y-z.y)),((z.y-q.y)*(x.y*y.x-x.x*y.y)-(x.y-y.y)*(z.y*q.x-z.x*q.y))/((y.y-x.y)*(q.x-z.x)-(y.x-x.x)*(q.y-z.y)));
        if((y.y-x.y)/(y.x-x.x)==(q.y-z.y)/(q.x-z.x))
        {
            System.out.print("is parallel lines,have no intersection point");
            return ;
        }
        else if(y.x==x.x&&z.x==q.x)
        {
            System.out.print("is parallel lines,have no intersection point");
            return ;
        }
        else
        {
            
            System.out.print(op.x+","+op.y);
            double a1 = Math.max(x.x, y.x);
            double a2 = Math.max(z.x, q.x);
            double i1 = Math.min(x.x, y.x);
            double i2 = Math.min(z.x, q.x);
            if ((((z.x-q.x)*(x.y*y.x-x.x*y.y)-(x.x-y.x)*(z.y*q.x-z.x*q.y))/((y.y-x.y)*(q.x-z.x)-(y.x-x.x)*(q.y-z.y)) > i1 || ((z.x-q.x)*(x.y*y.x-x.x*y.y)-(x.x-y.x)*(z.y*q.x-z.x*q.y))/((y.y-x.y)*(q.x-z.x)-(y.x-x.x)*(q.y-z.y)) > i2) && (((z.x-q.x)*(x.y*y.x-x.x*y.y)-(x.x-y.x)*(z.y*q.x-z.x*q.y))/((y.y-x.y)*(q.x-z.x)-(y.x-x.x)*(q.y-z.y)) < a2 || ((z.x-q.x)*(x.y*y.x-x.x*y.y)-(x.x-y.x)*(z.y*q.x-z.x*q.y))/((y.y-x.y)*(q.x-z.x)-(y.x-x.x)*(q.y-z.y)) < a1)) 
            {
                System.out.println(" " + true);
            } else 
            {
                System.out.println(" " + false);
            }
            return;
        }
        
        
    }
    
}

这道题我并没用完成,太难了呜呜呜,但是好歹写了一些拿到了一些分数,也不算是完全失败吧!

 

 

踩坑心得

关于类的使用,琢磨了很久,好歹还是掌握了一些些吧

还有正则表达式。。生气!

还有题目的隐藏条件也是非常坑人啊。。。

7-2里我一开始写的是寻找10,后来发现还有其他符合10的情况,后来改成0完成,还得是多多细心啊!

改进意见

题目集三的代码复杂度还是有点高,应该多加入一个输入类可以减少大量的工程,许多判断的条件也可以多加一个类,一些类的属性也没有写的很契合,下次改进吧

总结

虽然是困难重重吧,但好歹还是尽力的完成了这次的作业吧,浅浅的了解了面向对象应该怎么操作,转变了些许思维吧,但还是需要更努力的学习

让我们熟悉了整数和浮点数之间的算法,字符串的使用,正则表达式的使用。

 

posted @ 2022-09-30 17:02  帅的淌口水  阅读(56)  评论(0)    收藏  举报