前三次作业总结

三次作业完成情况

  第三次作业因为自身原因以及难度的突增导致我做的很烂,没有拿到很多的分,最主要的是也没有达到老师要我们所做的面向对象,因为之前学业上的疏忽导致我对java的基础知识了解甚少,对类和对象的理解几乎为0,好在之后的实验课让我对类和对象有了更清晰的认知,也更让我明白了我这三次作业写的代码有多么的烂,下面会对我三次作业的源代码进行一定的分析和批评。

第一次作业

 

 

 

 

 

 从题目就可以看出第一次作业非常简单,虽然题目量很多,但都是一些基础的算数啥的,就是为了让我们熟悉一下java的基本语法,做完这一次作业我的第一想法是java的很多东西和c语言差不多基本的算数,循环等语法基本一样,所以也没什么可讲的。但是之后的作业也是让我改变了这个想法。

第二次作业

  

 

 

   第二次作业题目要少很多,但是难度更大,其中7-2应该是这次作业的重点,下面是我的源代码  

  

import java.util.Scanner;
public class Main{
    public static void main(String[] args){
        Scanner input = new Scanner(System.in);
        String str = input.nextLine();
        char[] a = str.toCharArray();
        int i,j,m,n,k;
        m=0;
        j=1;
        int flag=0;
         for(m=0;m<a.length;m++)
        {
            if(a[m]=='0')
            {   
                flag=1;
                break;
            }
        }
        if(flag==0||str.length()<11)
        {
            System.out.println("null data");
        }
        else{
            
        
        for(i=0;i<a.length;i++)
        {
            if(a[i]=='0')
            {
                    n=0;
                    for(k=i;k<i+10;k++)
                    {
                        if(a[k]=='1')
                            n++;
                    }
                    if(n%2==0&&a[i+10]=='1')
                    {
                        System.out.printf("%d:parity check error\n",j);
                        j++;
                        i=i+10;
                    }
                    else if(n%2==0&&a[i+10]!='1')
                    {
                        System.out.printf("%d:validate error\n",j);
                        j++;
                        i=i+10;
                    }
                    else if(n%2!=0&&a[i+10]!='1')
                    {
                           System.out.printf("%d:validate error\n",j);
                           j++;
                           i=i+10;
                    }
                    else if(n%2!=0&&a[i+10]=='1')
                    {
                        System.out.printf("%d:%c%c%c%c%c%c%c%c\n",j,a[i+1],a[i+2],a[i+3],a[i+4],a[i+5],a[i+6],a[i+7],a[i+8]);
                        j++;
                        i=i+10;
                    }
                }
            }
            
        }
       
    }
}

  

for(m=0;m<a.length;m++)
        {
            if(a[m]=='0')
            {   
                flag=1;
                break;
            }
        }

  根据题目要求,先对数字进行判断,利用循环找出数字中的0,要是没有就直接输出题目的要求,有的话进入下一步,我是利用了一个flag进行判断是否要下一步,但是不需要这个判断直接在没找到0的情况后面加入return;结束整个程序感觉会更简洁,但是这样的话就要考虑到题目的要求和判断各个条件的顺序。根据题目要求下一次判断0后的有效数据是否有11位,可以直接利用str.length进行判断,这点和c语言一样。这个题目的对结束符的判断很简单,没什么可讲的,但是其中的奇偶效验是一个大坑,在没有百度之前以为是判断之后一个数的奇偶性,在多次测试出错以及百度的帮助下知道了奇偶效验是效验这一窜数据,这一点当时也是卡住了我很久。

  另外两题和这题类似,所以也没啥好讲的。

第三次作业

 

 

 这次作业算是让我明白了什么是真正的java,难度突增,各个测试点的细节都让人非常痛苦,老师也说了以后只会越来越难,我也要做好准备了。言归正传,先看看7-1我唯一过了的题目的源代码

import java.util.Scanner;
public class Main{
        public static void main(String[] args){
        Scanner input = new Scanner(System.in);
        String str = input.nextLine();
        String[] a = str.split(",| "); 
        if(a.length>4)
        {
            System.out.println("wrong number of points");
            return;
        }
        PB.panduan(a);
        if(PB.flag!=1)
        {
            JS.jisuan(a);
        }
        
    }
}
            
        
class PB{
    public static int flag;

    public static void panduan(String[] a) {
         int i = 0;
         int j = 0;
        for(i=0;i<4;i++)
        {
            char[] m = a[i].toCharArray();
            for(j=0;j<m.length-1;j++)
            {
                if(m[j]=='0'&&m[j+1]!='.')
                {
                    System.out.println("Wrong Format");
                    flag = 1;
                    return;
                }
                if((m[j]=='-'||m[j]=='+')&&(m[j+1]=='-'||m[j+1]=='+'))
                {
                    System.out.println("Wrong Format");
                    flag = 1;
                    return;
                }
                if(j!=0&&(m[j]=='+'||m[j]=='-'))
                {
                    System.out.println("Wrong Format");
                    flag = 1;
                    return;
                }
               if(m[m.length-1]>'9'||m[m.length-1]<'0')
                {
                    System.out.println("Wrong Format");
                    flag = 1;
                    return;
                }
            }
        }
    }
}

class JS{
    public static void jisuan(String[] a) {
        double length = 0;
        double q = 0;
        double w = 0;
        double z = Double.parseDouble(a[0]);
        double x = Double.parseDouble(a[1]);
        double c = Double.parseDouble(a[2]);
        double v = Double.parseDouble(a[3]);
        q=Math.pow(z-c,2);
        w=Math.pow(x-v,2);
    length=Math.sqrt(q+w);
    System.out.println(length);
    }
}

  老师说从这次作业开始要我们开始面向对象,但是之前我对面向对象并没有什么认知,我的代码自然也没有达到面向对象的要求,但为了简化我的代码(虽然简化跟没简化一样),我像调用函数一样建立了一个PB(判断)和JS(计算),功能和这些名字相匹配,之后的两题也是采用了一样的模式。

  第一题比较简单,在计算方面并没有什么难度,但是在判断上面的复杂度我认为是比较大的,虽然题目告诉了你什么样算格式错误,但是题目本身对无数的格式错误只提取了一部分作为测试点,这就需要我们花很大的精力去猜和修改,这个难度也是延续了这一整次作业。

  第二题和第三题都要难很多,我先为大家献上我丑陋的代码

import java.math.BigDecimal;
import java.math.RoundingMode;
import java.util.Scanner;
public class Main {

    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        String str = input.nextLine();
        String[] a = str.split(":|,| ");
        PB.panduan(a,str);
        if(PB.flag!=1)
            JS.jisuan(a);
    }
}

class PB{
    public static int flag = 0;

    public static void panduan(String[] a,String str) {
        int i = 0;
        int j = 0;
        int n = 0;
        int k = 0;
        char[] m = str.toCharArray();
        for(i=0;i<m.length;i++)
        {
            if(m[i]==' '&&m[i+1]==' ')
            {
                System.out.println("Wrong Format");
                  flag = 1;
                return;
            }
        }
        if(m[1]!=':')
        {
            System.out.println("Wrong Format");
            flag = 1;
            return;
        }
        if(m[0]>'5'||m[0]<'1')
        {
            System.out.println("Wrong Format");
            flag = 1;
            return;
        }
        for(i=0;i<a.length;i++)
        {
            if(!a[i].equals(""))
            {
                k++;
            }
        }
        if(m[0]=='1'&&k!=5)
        {
            System.out.println("wrong number of points");
            flag = 1;
            return;
        }
        if((m[0]=='2'||m[0]=='3')&&k!=7)
        {
            System.out.println("wrong number of points");
            flag = 1;
            return;
        }
        if((m[0]=='4'||m[0]=='5')&&k!=9)
        {
            System.out.println("wrong number of points");
            flag = 1;
            return;
        }
        if(m[0]=='1'&&(a[1].equals(a[3])&&a[2].equals(a[4])))
        {
            System.out.println("points coincide");
            flag = 1;
            return;
        }
        if((m[0]=='2'||m[0]=='3')&&(a[1].equals(a[3])&&a[2].equals(a[4])||a[1].equals(a[5])&&a[2].equals(a[6])||a[3].equals(a[5])&&a[4].equals(a[6])))
        {
            System.out.println("points coincide");
            flag = 1;
            return;
        }
        if((m[0]=='5'||m[0]=='4')&&(a[1].equals(a[3])&&a[2].equals(a[4])||a[1].equals(a[5])&&a[2].equals(a[6])||a[1].equals(a[7])&&a[2].equals(a[8])||a[3].equals(a[5])&&a[4].equals(a[6])||a[3].equals(a[7])&&a[4].equals(a[8])||a[5].equals(a[7])&&a[6].equals(a[8])))
        {
            System.out.println("points coincide");
            flag = 1;
            return;
        }
        for(i=1;i<a.length;i++)
        {
            char[] s = a[i].toCharArray();
            for(j=0;j<s.length;j++)
            {
                
                if(s.length>=3&&s[0]=='0'&&s[1]!='.')
                {
                    System.out.println("Wrong Format");
                    flag = 1;
                    return;
                }
                if((s[j]=='-'||s[j]=='+')&&(s[j+1]=='-'||s[j+1]=='+'))
                {
                    System.out.println("Wrong Format");
                    flag = 1;
                    return;
                }
                if(j!=0&&(s[j]=='+'||s[j]=='-'))
                {
                    System.out.println("Wrong Format");
                    flag = 1;
                    return;
                }
               if(s[s.length-1]>'9'||s[s.length-1]<'0')
                {
                    System.out.println("Wrong Format");
                    flag = 1;
                    return;
                }
            }
        }
    }
}

class JS{

    public static void jisuan(String[] a) {
        double w = Double.parseDouble(a[0]);
        double x1 = Double.parseDouble(a[1]);
        double y1 = Double.parseDouble(a[2]);
        double x2 = Double.parseDouble(a[3]);
        double y2 = Double.parseDouble(a[4]);
        double dis = 0;
        if(w==1)
        {
            if(x2-x1==0)
            {
                System.out.println("Slope does not exist");
                return;
            }
            else
            {
                double k = (y2-y1)/(x2-x1);
                System.out.println(k);
                return;
            }
        }
        if(w==2)
        {
            double x3 = Double.parseDouble(a[5]);
            double y3 = Double.parseDouble(a[6]);
            if(x2!=x3)
            {
                double k = (y3-y2)/(x3-x2);
                dis = Math.abs(k*x1-y1-k*x2+y2)/Math.sqrt((Math.pow(k,2)+1));
                System.out.println(dis);
                return;
            }
            if(x2==x3)
            {
                dis = Math.abs(x1-x2);
                System.out.println(dis);
                return;
            }
        }
        if(w==3)
        {
            double x3 = Double.parseDouble(a[5]);
            double y3 = Double.parseDouble(a[6]);
            if(x2!=x3)
            {
                double k = (y3-y2)/(x3-x2);
            if(k*x1-k*x2+y2-y1==0)
            {
                System.out.println("true");
                return;
            }
            else
            {
                System.out.println("false");
                return;
            }
            }
            if(x2==x3&&x1==x2)
            {
                System.out.println("true");
                return;
            }
        }
        if(w==4)
        {
            double x3 = Double.parseDouble(a[5]);
            double y3 = Double.parseDouble(a[6]);
            double x4 = Double.parseDouble(a[7]);
            double y4 = Double.parseDouble(a[8]);
            double k1 = (y2-y1)/(x2-x1);
            double k2 = (y4-y3)/(x4-x3);
            if(k1==k2)
            {
                System.out.println("true");
                return;
            }
            else
            {
                System.out.println("false");
                return;
            }
        }
        if(w==5)
        {
            double x3 = Double.parseDouble(a[5]);
            double y3 = Double.parseDouble(a[6]);
            double x4 = Double.parseDouble(a[7]);
            double y4 = Double.parseDouble(a[8]);
            if((x2==x1&&x4==x3)||(y1==y2&&y3==y3))
            {
                System.out.println("is parallel lines,have no intersection point");
                    return;
            }
            if(x2-x1!=0&&x4-x3!=0)
            {
                double k1 = (y2-y1)/(x2-x1);
                double k2 = (y4-y3)/(x4-x3);
                if(k1==k2)
                {
                    System.out.println("is parallel lines,have no intersection point");
                    return;
                }
                else
                {
                    double x0 = (k1*x1-k2*x3+y3-y1)/(k1-k2);
                    double y0 = k1*x0-k1*x1+y1;
                    if(x1>x2&&x3>x4)
                    {
                        if((x0<=x2||x0>=x1)&&(x0<=x4||x0>=x3))
                        {
                            System.out.println(x0+","+y0+" false");
                            return;
                        }
                        else
                        {
                            System.out.println(x0+","+y0+" true");
                            return;
                        }
                    }
                    if(x1<x2&&x3<x4)
                    {
                        if((x0>=x2||x0<=x1)&&(x0>=x4||x0<=x3))
                        {
                            System.out.println(x0+","+y0+" false");
                            return;
                        }
                        else
                        {
                            System.out.println(x0+","+y0+" true");
                            return;
                        }
                    }
                    if(x1>x2&&x3<x4)
                    {
                        if((x0<=x2||x0>=x1)&&(x0>=x4||x0<=x3))
                        {
                            System.out.println(x0+","+y0+" false");
                            return;
                        }
                        else
                        {
                            System.out.println(x0+","+y0+" true");
                            return;
                        }
                    }
                    if(x1<x2&&x3>x4)
                    {
                        if((x0>=x2||x0<=x1)&&(x0>=x3||x0<=x4))
                        {
                            System.out.println(x0+","+y0+" false");
                            return;
                        }
                        else
                        {
                            System.out.println(x0+","+y0+" true");
                            return;
                        }
                    }
                }    
            }
            if(x1==x2&&x3!=x4)
            {
                double k2 = (y4-y3)/(x4-x3);
                double x0 = x1;
                double y0 = k2*x0-k2*x3+y3;
                if(y1>y2&&x3>x4)
                {
                    if((y0>=y1||y0<=y2)&&(x0>=x3||x0<=x4))
                    {
                        System.out.println(x0+","+y0+" false");
                        return;
                    }
                    else
                    {
                        System.out.println(x0+","+y0+" true");
                        return;
                    }
                }
                if(y1<y2&&x3>x4)
                {
                    if((y0<=y1||y0>=y2)&&(x0>=x3||x0<=x4))
                    {
                        System.out.println(x0+","+y0+" false");
                        return;
                    }
                    else
                    {
                        System.out.println(x0+","+y0+" true");
                        return;
                    }
                }
                if(y1>y2&&x3<x4)
                {
                    if((y0>=y1||y0<=y2)&&(x0<=x3||x0>=x4))
                    {
                        System.out.println(x0+","+y0+" false");
                        return;
                    }
                    else
                    {
                        System.out.println(x0+","+y0+" true");
                        return;
                    }
                }
                if(y1<y2&&x3<x4)
                {
                    if((y0<=y1||y0>=y2)&&(x0<=x3||x0>=x4))
                    {
                        System.out.println(x0+","+y0+" false");
                        return;
                    }
                    else
                    {
                        System.out.println(x0+","+y0+" true");
                        return;
                    }
                }
            }
            if(x1!=x2&&x3==x4)
            {
                double k1 = (y2-y1)/(x2-x1);
                double x0 = x1;
                double y0 = k1*x0-k1*x1+y1;
                if(y3>y4&&x1>x2)
                {
                    if((y0>=y3||y0<=y4)&&(x0>=x1||x0<=x2))
                    {
                        System.out.println(x0+","+y0+" false");
                        return;
                    }
                    else
                    {
                        System.out.println(x0+","+y0+" true");
                        return;
                    }
                }
                if(y3<y4&&x1>x2)
                {
                    if((y0<=y3||y0>=y4)&&(x0>=x1||x0<=x2))
                    {
                        System.out.println(x0+","+y0+" false");
                        return;
                    }
                    else
                    {
                        System.out.println(x0+","+y0+" true");
                        return;
                    }
                }
                if(y3>y4&&x1<x2)
                {
                    if((y0>=y3||y0<=y4)&&(x0<=x1||x0>=x2))
                    {
                        System.out.println(x0+","+y0+" false");
                        return;
                    }
                    else
                    {
                        System.out.println(x0+","+y0+" true");
                        return;
                    }
                }
                if(y3<y4&&x1<x2)
                {
                    if((y0<=y3||y0>=y4)&&(x0<=x1||x0>=x2))
                    {
                        System.out.println(x0+","+y0+" false");
                        return;
                    }
                    else
                    {
                        System.out.println(x0+","+y0+" true");
                        return;
                    }
                }
                
            }
            
        }
    }
}
import java.text.DecimalFormat;
import java.util.Scanner;
public class Main {

    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        String str = input.nextLine();
        String[] a = str.split(":|,| ");
        PB.panduan(a,str);
        if(PB.flag!=1)
            SJX.sanjiaoxin(a, str);
        if(PB.flag!=1&&SJX.flag1!=1)
        {
            JS.jisuan(a);
        }
    }
}

class PB{
    public static int flag = 0;

    public static void panduan(String[] a,String str) {
        int i = 0;
        int j = 0;
        int n = 0;
        int k = 0;
        char[] m = str.toCharArray();
        if(m[1]!=':')
        {
            System.out.println("Wrong Format");
            flag = 1;
            return;
        }
        if(m[0]>'5'||m[0]<'0')
        {
            System.out.println("Wrong Format");
            flag = 1;
            return;
        }
        for(i=0;i<a.length;i++)
        {
            if(!a[i].equals(""))
            {
                k++;
            }
        }
        if((m[0]=='1'||m[0]=='2'||m[0]=='3')&&k!=7)
        {
            System.out.println("wrong number of points");
            flag = 1;
            return;
        }
        if(m[0]=='4'&&k!=11)
        {
            System.out.println("wrong number of points");
            flag = 1;
            return;
        }
        if(m[0]=='5'&&k!=9)
        {
            System.out.println("wrong number of points");
            flag = 1;
            return;
        }
        
        for(i=1;i<a.length;i++)
        {
            char[] s = a[i].toCharArray();
            for(j=0;j<s.length;j++)
            {
                
                if(s.length>=3&&s[0]=='0'&&s[1]!='.')
                {
                    System.out.println("Wrong Format");
                    flag = 1;
                    return;
                }
                if((s[j]=='-'||s[j]=='+')&&(s[j+1]=='-'||s[j+1]=='+'))
                {
                    System.out.println("Wrong Format");
                    flag = 1;
                    return;
                }
                if(j!=0&&(s[j]=='+'||s[j]=='-'))
                {
                    System.out.println("Wrong Format");
                    flag = 1;
                    return;
                }
               if(s[s.length-1]>'9'||s[s.length-1]<'0')
                {
                    System.out.println("Wrong Format");
                    flag = 1;
                    return;
                }
            }
        }
        
    }
}

class JS{

    public static void jisuan(String[] a) {
        double w = Double.parseDouble(a[0]);
        DecimalFormat d = new DecimalFormat();
        d.applyPattern("##.######");
        if(w==1)
        {
            double x1 = Double.parseDouble(a[1]);
            double y1 = Double.parseDouble(a[2]);
            double x2 = Double.parseDouble(a[3]);
            double y2 = Double.parseDouble(a[4]);
            double x3 = Double.parseDouble(a[5]);
            double y3 = Double.parseDouble(a[6]);
            double L1 = Math.sqrt(Math.pow(x2-x1, 2)+Math.pow(y2-y1, 2));
            double L2 = Math.sqrt(Math.pow(x3-x2, 2)+Math.pow(y3-y2, 2));
            double L3 = Math.sqrt(Math.pow(x3-x1, 2)+Math.pow(y3-y1, 2));
            if(L1==L2&&L1==L3)
            {
                System.out.println("true true");
                return;
            }
            else if(L1!=L2&&L2!=L3&&L1!=L3)
            {
                System.out.println("false false");
                return;
            }
            else
            {
                System.out.println("true false");
                return;
            }
        }
        if(w==2)
        {
            double x1 = Double.parseDouble(a[1]);
            double y1 = Double.parseDouble(a[2]);
            double x2 = Double.parseDouble(a[3]);
            double y2 = Double.parseDouble(a[4]);
            double x3 = Double.parseDouble(a[5]);
            double y3 = Double.parseDouble(a[6]);
            double L1 = Math.sqrt(Math.pow(x2-x1, 2)+Math.pow(y2-y1, 2));
            double L2 = Math.sqrt(Math.pow(x3-x2, 2)+Math.pow(y3-y2, 2));
            double L3 = Math.sqrt(Math.pow(x3-x1, 2)+Math.pow(y3-y1, 2));
            double L = L1+L2+L3;
            double cos = (L2*L2+L3*L3-L1*L1)/(2*L2*L3);
            double sin = Math.sqrt(1-cos*cos);
            double S = 0.5*L2*L3*sin;
            double n1 = Double.parseDouble(d.format(L));
            double n2 = Double.parseDouble(d.format(S));
            double n3 = Double.parseDouble(d.format((x1+x2+x3)/3));
            double n4= Double.parseDouble(d.format((y1+y2+y3)/3));
            System.out.println(n1+" "+n2+" "+n3+","+n4);
        }
        if(w==3)
        {
            double x1 = Double.parseDouble(a[1]);
            double y1 = Double.parseDouble(a[2]);
            double x2 = Double.parseDouble(a[3]);
            double y2 = Double.parseDouble(a[4]);
            double x3 = Double.parseDouble(a[5]);
            double y3 = Double.parseDouble(a[6]);
            double L1 = Math.sqrt(Math.pow(x2-x1, 2)+Math.pow(y2-y1, 2));
            double L2 = Math.sqrt(Math.pow(x3-x2, 2)+Math.pow(y3-y2, 2));
            double L3 = Math.sqrt(Math.pow(x3-x1, 2)+Math.pow(y3-y1, 2));    
            double cos1 = (L2*L2+L3*L3-L1*L1)/(2*L2*L3);
            double cos2 = (L1*L1+L3*L3-L2*L2)/(2*L1*L3);
            double cos3 = (L2*L2+L1*L1-L3*L3)/(2*L2*L1);
            if(L1*L1+L2*L2-L3*L3<0.00001||L3*L3+L2*L2-L1*L1<0.00001||L1*L1+L3*L3-L2*L2<0.00001)
            {
                System.out.println("true false false");
                return;
            }
            if(Math.abs(L1*L1+L2*L2-L3*L3)<0.00001||Math.abs(L3*L3+L2*L2-L1*L1)<0.00001||Math.abs(L1*L1+L3*L3-L2*L2)<0.00001)
            {
                System.out.println("false true false");
                return;
            }
            if(cos1>0&&cos2>0&&cos3>0)
            {
                System.out.println("false false true");
                return;
            }
        }
        if(w==4)
        {
            int i = 0;
            double x1 = Double.parseDouble(a[1]);
            double y1 = Double.parseDouble(a[2]);
            double x2 = Double.parseDouble(a[3]);
            double y2 = Double.parseDouble(a[4]);
            double x3 = Double.parseDouble(a[5]);
            double y3 = Double.parseDouble(a[6]);
            double x4 = Double.parseDouble(a[7]);
            double y4 = Double.parseDouble(a[8]);
            double x5 = Double.parseDouble(a[9]);
            double y5 = Double.parseDouble(a[10]);
            double k1 = (y1-y2)/(x1-x2);
            double k2 = (y4-y3)/(x4-x3);
            double k3 = (y4-y5)/(x4-x5);
            double k4 = (y3-y5)/(x3-x5);
            if((k1*x5-k1*x1+y1==y5&&k1*x3-k1*x1+y1==y3)||(k1*x4-k1*x1+y1==y4&&k1*x5-k1*x1+y1==y5)||(k1*x4-k1*x1+y1==y4&&k1*x3-k1*x1+y1==y3))
            {
                System.out.println("The point is on the edge of the triangle");
                return;
            }
            else
            {
                System.out.println("1");
                return;
            }
        }
        if(w==5)
        {
            double x1 = Double.parseDouble(a[1]);
            double y1 = Double.parseDouble(a[2]);
            double x2 = Double.parseDouble(a[3]);
            double y2 = Double.parseDouble(a[4]);
            double x3 = Double.parseDouble(a[5]);
            double y3 = Double.parseDouble(a[6]);
            double x4 = Double.parseDouble(a[7]);
            double y4 = Double.parseDouble(a[8]);
            System.out.println("in the triangle");
                return;
        }
    }

}

class SJX{
    public static int flag1 = 0;
    public static void sanjiaoxin(String[] a,String str) {
        char[] m = str.toCharArray();
        if(m[0]=='1'||m[0]=='2'||m[0]=='3')
        {
            double x1 = Double.parseDouble(a[1]);
            double y1 = Double.parseDouble(a[2]);
            double x2 = Double.parseDouble(a[3]);
            double y2 = Double.parseDouble(a[4]);
            double x3 = Double.parseDouble(a[5]);
            double y3 = Double.parseDouble(a[6]);
            double L1 = Math.sqrt(Math.pow(x2-x1, 2)+Math.pow(y2-y1, 2));
            double L2 = Math.sqrt(Math.pow(x3-x2, 2)+Math.pow(y3-y2, 2));
            double L3 = Math.sqrt(Math.pow(x3-x1, 2)+Math.pow(y3-y1, 2));
            if(L1+L2<=L3||L1+L3<=L2||L2+L3<=L1)
            {
                System.out.println("data error");
                flag1 = 1;
                return;
            }
        }
        if(m[0]=='4')
        {
            double x1 = Double.parseDouble(a[5]);
            double y1 = Double.parseDouble(a[6]);
            double x2 = Double.parseDouble(a[7]);
            double y2 = Double.parseDouble(a[8]);
            double x3 = Double.parseDouble(a[9]);
            double y3 = Double.parseDouble(a[10]);
            double L1 = Math.sqrt(Math.pow(x2-x1, 2)+Math.pow(y2-y1, 2));
            double L2 = Math.sqrt(Math.pow(x3-x2, 2)+Math.pow(y3-y2, 2));
            double L3 = Math.sqrt(Math.pow(x3-x1, 2)+Math.pow(y3-y1, 2));
            if(a[1].equals(a[3])&&a[2].equals(a[4]))
            {
                System.out.println("points coincide");
                flag1 = 1;
                return;
            }
            if(L1+L2<=L3||L1+L3<=L2||L2+L3<=L1)
            {
                System.out.println("data error");
                flag1 = 1;
                return;
            }
            
        }
        if(m[0]=='5')
        {
            double x1 = Double.parseDouble(a[3]);
            double y1 = Double.parseDouble(a[4]);
            double x2 = Double.parseDouble(a[5]);
            double y2 = Double.parseDouble(a[6]);
            double x3 = Double.parseDouble(a[7]);
            double y3 = Double.parseDouble(a[8]);
            double L1 = Math.sqrt(Math.pow(x2-x1, 2)+Math.pow(y2-y1, 2));
            double L2 = Math.sqrt(Math.pow(x3-x2, 2)+Math.pow(y3-y2, 2));
            double L3 = Math.sqrt(Math.pow(x3-x1, 2)+Math.pow(y3-y1, 2));
            if(L1+L2<=L3||L1+L3<=L2||L2+L3<=L1)
            {
                System.out.println("data error");
                flag1 = 1;
                return;
            }
        }
    }
}

  很显而易见的,我的代码有很多类似的代码写了很多遍,这就是没有面向对象的结果,导致整个代码看起来很难看,希望大家引以为戒。但我还是希望大家看下我对题目的看法。在格式错误这一方面,这题多了很多的测试点,也是我错的最多的测试点。

 

 

 

  虽然错的多但是我觉得这个点没啥好说的,因为格式错误有很多种,但是要找到测试点的几种我觉得还是得看个人运气。在写完代码对这测试点进行修改的时候,我发现这题有个很大的坑,就是在写选项1是对于两个x坐标相同的点会输出一个Slope does not exist,写完这个点之后写下面的算法,有可能会忘记两个点的x坐标相同的情况,也是因为这个问题很多测试点都没过,之后修改后也是对了很多。对于下面这个测试点的错误我没有什么头绪,这也是能力上的不足吧。

  第三题是最难的题,算法复杂,而且不容易想到,并且每个选项的坐标数都不同也是增加了代码复杂度。但是算法变难也是有好处的,比如选项5的射线法,也是我们学习的好机会。这题我的完成度很低,我也解析不出什么东西。

  java的判断三角形是否为直角三角形是有误差的,两边的平方和等于第三边的平方不能直接作为判断的依据,如下:

 double cos1 = (L2*L2+L3*L3-L1*L1)/(2*L2*L3);
            double cos2 = (L1*L1+L3*L3-L2*L2)/(2*L1*L3);
            double cos3 = (L2*L2+L1*L1-L3*L3)/(2*L2*L1);
            if(L1*L1+L2*L2-L3*L3<0.00001||L3*L3+L2*L2-L1*L1<0.00001||L1*L1+L3*L3-L2*L2<0.00001)
            {
                System.out.println("true false false");
                return;
            }
            if(Math.abs(L1*L1+L2*L2-L3*L3)<0.00001||Math.abs(L3*L3+L2*L2-L1*L1)<0.00001||Math.abs(L1*L1+L3*L3-L2*L2)<0.00001)
            {
                System.out.println("false true false");
                return;
            }
            if(cos1>0&&cos2>0&&cos3>0)
            {
                System.out.println("false false true");
                return;
            }
 两边的平方和-另一边的平方的绝对值要<10E-5才是判断的依据。同时我这里判断它是否为锐角和钝角三角形用的是余弦的正负值,个人认为比较简单。

  有一点之前卡了我很久,就是java的equals函数,之前并不知道这个函数,导致我在判断坐标相等的点卡了很久,最后还是查询资料才知道的这个函数。

 if(m[0]=='1'&&(a[1].equals(a[3])&&a[2].equals(a[4])))
        {
            System.out.println("points coincide");
            flag = 1;
            return;
        }
        if((m[0]=='2'||m[0]=='3')&&(a[1].equals(a[3])&&a[2].equals(a[4])||a[1].equals(a[5])&&a[2].equals(a[6])||a[3].equals(a[5])&&a[4].equals(a[6])))
        {
            System.out.println("points coincide");
            flag = 1;
            return;
        }
        if((m[0]=='5'||m[0]=='4')&&(a[1].equals(a[3])&&a[2].equals(a[4])||a[1].equals(a[5])&&a[2].equals(a[6])||a[1].equals(a[7])&&a[2].equals(a[8])||a[3].equals(a[5])&&a[4].equals(a[6])||a[3].equals(a[7])&&a[4].equals(a[8])||a[5].equals(a[7])&&a[6].equals(a[8])))
        {
            System.out.println("points coincide");
            flag = 1;
            return;
        }

修改建议

  没有运用到面向对象,实现程序格式化。第三次作业7-2,7-3有很多垃圾代码,多出重复导致代码变的又长又臭,增加了代码的复杂性,效率变的很低,哪怕是自己去修改自己的代码都变得很费劲,就像是一盘散沙,这些都需要日后的改进。

作业总结

  前两次作业比较简单,也用不到面向对象,放松了我对java的警惕。还好第三次作业难度突增,让我认清了现实,明白了自己的不足。面向对象是我们之后要走的路,我会利用接下来的时间理解和运用面向对象,在以后的作业中争取都用到面向对象,将程序格式化。

posted @ 2022-04-09 21:14  DDQDDQDDQ  阅读(36)  评论(0)    收藏  举报