一、前言

1.知识点总结

<1>第一次大作业

题型总结:BMI测算、单位转换、奇数求和、房产税费计算、角色选择、学号识别、提取二进制数值、三角判断

涉及知识点:Scanner类的使用、if else语句的使用及嵌套、for循环的使用及嵌套、强制类型转换、条件判断、字符串的提取、字符串和整型的转化、Math类的使用、一维数组的使用、变量声明、类的封装、输出语句的使用

<2>第二次大作业

题型总结:字母与数字的转换、串口字符解析、String的格式判断与内容提取

涉及知识点:Scanner类的使用、if else语句的使用及嵌套、字符串的提取、字符串和整型的转化、Math类的使用、一维数组的使用、类的封装、获取字符串长度、类的概念与调用、输出语句的使用

<3>第三次大作业

题型总结:两点距离计算、线相关计算、三角形相关计算

涉及知识点:Scanner类的使用、if else语句的使用及嵌套、条件判断、正则表达式的学习和使用、字符串的比较、字符串的提取、字符串和整型的转化、Math类的使用、一维数组的使用、类的封装、获取字符串长度、输出语句的使用、强制数据类型转换、类的声明与使用、三角类型判断算法、方法的调用与数据返回

2.题量

<1>第一次大作业:较多

<2>第二次大作业:适中

<3>第三次大作业:适中

 

3.难度评估

<1>第一次大作业:简单

<2>第二次大作业:7-1简单、7-2偏难、7-3适中

<3>第三次大作业:困难

二、设计与分析

1.算法设计以及思路

<1>第二次作业第二题

7-2 串口字符解析 (40 )

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

类图:

大概思路:

把串口每次发送的数据看作一个对象,对其进行合法判断、数据提取、最后进行类型判断

若数据不足11位或者输入数据全1没有起始位,则输出”null data”,

若数据的结束符不为1,则输出“validate error”。

若数据奇偶校验错误,则输出“parity check error”。

若数据结束符和奇偶校验均不合格,输出“validate error”。

源码(具体代码分析写在注释里):

 点击白框查看

import java.util.Scanner;

public class Main {
      public static void main(String []args) {
      Fn code=new Fn();// 每个串口都看作一个对象,但本题只判断一个,所以这里只new一次
      code.judge_type();     
}
}
class Fn{
    Scanner s =new  Scanner(System.in);
    String com = s.next();//获取串口
    int length = com.length();//计算字符串长度
    String a = new String();
    int tem = length;
    void judge_type() {
        if(length<11||all1())//如果小于11,不满足一个串口的基本位数,或者全是1,找不到起始位0,都输出空串口
             System.out.print("null data");
        else
        {
            int odd = 0;
            int id=0;
            int j=0;    
            boolean judge =true;
            for(int i=0;i<length;i++) {
                if(com.charAt(i)=='0') //找到起始位
                {
                   if(length-i<10)
                       judge= false;
                    boolean end = false;//clear start
                    for( j=1;j<=8;j++)//起始位后八位数进行分析
                    {
                        if(com.charAt(i+j)=='1')//记奇数的个数
                            odd++;
                        if(com.charAt(i+10)=='1')//判断结束位
                            end = true;
                        a+=com.charAt(i+j);
                    }
                    if(com.charAt(i+9)=='1')//判断奇偶位
                        odd++;
                   i+=10;
                    id++;
                    System.out.print(id+":");
                    if(odd%2==0) {
                     if(!end)//如果没有结束位且为偶数个1
                        System.out.println("validate error");
                     else
                        System.out.println("parity check error");
                    }
                    else {
                            if(!end)
                                System.out.println("validate error");
                            else {
                                if(judge)
                                {
                                System.out.println(a);
                                a="";  
                                }
                        }
                    }
                    odd=0;//clear
                }
            }
        }
    }
        boolean all1() {//判断是否都为1
            int i=0;
            boolean z =true;
            for(;i<tem;i++)
            if(com.charAt(i)=='0')
                z=false;
            return z;
        }
}

View Code

 

<2>第三次作业第一题

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

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

输入格式:

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

类图:

大概思路:

Point函数是对字符串数据的转换,legal函用来判断输入数据是否合法,这里学习了正则表达式,表达式写的比较简单,这题的算法也比较简单,

若输入格式非法,输出”Wrong Format”。若输入格式合法但坐标点的数量超过两个,输出“wrong number of points”。

 源码(具体代码分析写在注释里):

点击白框查看

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner s = new Scanner(System.in);
        String str = s.nextLine();
        String[] dj = str.split(" ");
        boolean a =false;
        for(int i=0;i<str.length();i++){
        if(str.charAt(i)==' ')//防止输入无空格的连续数字,基本格式错误
            a=true;
        }
        if(a==false){
            System.out.print("Wrong Format");
        }
        String[] point1 = dj[0].split(",");//提取两个点
        String[] point2 = dj[1].split(",");//提取x,y坐标
        P z = new P();
        if(point1.length==2&&point2.length==2){//考虑点重合的情况
        if (z.legal(point1[0]) && z.legal(point1[1]) && z.legal(point2[0]) && z.legal(point2[1])){//每个坐标都进行合法判断
            double x1 = z. Point(point1[0]);
            double y1 = z. Point(point1[1]);
            double x2 = z. Point(point2[0]);
            double y2 = z. Point(point2[1]);
             if(dj.length==2)
            System.out.print(Math.sqrt(Math.pow(x2 - x1, 2.0) + Math.pow(y2 - y1, 2.0)));
             if(dj.length>2)//前两个点的输入合法,但输入多个坐标时
             System.out.print("wrong number of points");
        }
        else
            System.out.print("Wrong Format");
        }
        else 
            System.out.print("Wrong Format");
    }
}

class P {
    double Point(String r) {//这个地方开始想复杂了,后面其实可以强制转换成数字的,符号也可以
        double tran = 0;
        int len = r.length();
        if (r.charAt(0) == '+') {
            r = r.substring(1, len);
            tran = Double.parseDouble(r);
        }
        if (r.charAt(0) == '-') {
            r = r.substring(0, len);
            tran = Double.parseDouble(r);
        }
          if(Character.isDigit(r.charAt(0)))              
          {
              r = r.substring(0);
            tran = Double.parseDouble(r);
}
        return tran;
    }

    boolean legal(String x) {
        String w = "[+-]?(\\d+)(\\.\\d+)?$";//判断输入
       for(int i=1;i<x.length();i++){
       if(x.charAt(0)=='0'&&x.length()>1&&x.charAt(1)!='.')
           return false;
           }
         if(x.matches(w))//匹配
            return true;
          else
            return false; 
    }

}

View Code

 

<3>第三次作业第二题

7-2 点线形系列2-线的计算 (42 分)

用户输入一组选项和数据,进行与直线有关的计算。选项包括:
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”,

输出格式:

见题目描述。

类图:

 

 大概思路:

通过legal函用来判断输入数据是否合法,把选项看作一个类,具体写法和第一题差不多,但写到这时候发现用一个函数把字符串转换成数字类型太麻烦,直接强制转换,正负号也可以保留下来。

这道题复杂的是算法

计算斜率:k=(y2-y1)/(x2-x1);

计算一点到另外两点构成的直线的距离:需要先算直线方程,再求点到该直线的距离 :    

   

判断三点是否在一线,即判断三点中任意两点组成的线段的斜率是否相等,这个比较简单,用(y1-y2)*(x-x2) == (x1-x2)*(y-y2)判断即可

判断两条线是否平行,即判断斜率是否存在且相等,比较两条线k=(y2-y1)/(x2-x1);

判断两线关系,如果不平行,则计算交点位置,并判断交点是否在线上。交点公式参考文章:两点确定一条直线,已知四个点确定的两条直线,求这两条直线的交点_risemypassion的博客-CSDN博客

源码(具体代码分析写在注释里):

点击白框查看

import java.util.Scanner;

public class Main{
    public static void main(String[] args) {
        Scanner s = new Scanner(System.in);
        String str = s.nextLine();
        P z = new P();
        boolean a =false;
         for(int i=0;i<str.length();i++)
        if(str.charAt(i)==' ')
            a=true;
        if(str.charAt(1)!=':'||a==false)//基本格式的判断
        System.out.print("Wrong Format"); 
        else {
            if (str.charAt(0) == '1')
                z.One(str.substring(2));
            if (str.charAt(0) == '2')
                z.Two(str.substring(2));
            if (str.charAt(0) == '3')
                z.Three(str.substring(2));
            if (str.charAt(0) == '4')
                z.Four(str.substring(2));
            if (str.charAt(0) == '5')
                z.Five(str.substring(2));
        }
    }
}
    
 class P {
    boolean legal(String x) {
        String w = "[+-]?(\\d+)(\\.\\d+)?$";
        for (int i = 1; i < x.length(); i++) {
            if (x.charAt(0) == '0' && x.length() > 1 && x.charAt(1) != '.')
                return false;
        }
        if (x.matches(w))
            return true;
        else
            return false;
    }
    void One(String x) {
        String[] dj = x.split(" ");
        String[] point1 = dj[0].split(",");
        String[] point2 = dj[1].split(",");
        if (!dj[0].equals(dj[1])) {//防止点重合
            if (point1.length == 2 && point2.length == 2) {//判断有x,y的值
                if (legal(point1[0]) && legal(point1[1]) && legal(point2[0]) && legal(point2[1])) {//判断输入数据合法
                    double x1 = Double.parseDouble(point1[0]);
                    double y1 = Double.parseDouble(point1[1]);
                    double x2 = Double.parseDouble(point2[0]);
                    double y2 = Double.parseDouble(point2[1]);
                    if (dj.length == 2)
                        if (x1 == x2)
                            System.out.print("Slope does not exist");
                        else
                            System.out.print((y2 - y1) / (x2 - x1));//一切正确,输出斜率
                    if (dj.length > 2)
                        System.out.print("wrong number of points");
                } else
                    System.out.print("Wrong Format");
            } else
                System.out.print("Wrong Format");
        } else
            System.out.print("points coincide");
    }
     void Two(String x) {
        String[] dj = x.split(" ");
        String[] point1 = dj[0].split(",");
        String[] point2 = dj[1].split(",");
         if (dj.length < 3)//防止点数量不够,导致不存在后面的元素
                        System.out.print("wrong number of points");
        String[] point3 = dj[2].split(",");
        if (!dj[1].equals(dj[2])) {
            if (point1.length == 2 && point2.length == 2 && point3.length == 2) {                
                if (legal(point1[0]) && legal(point1[1]) && legal(point2[0]) && legal(point2[1]) && legal(point3[0])
                        && legal(point3[1])) {
                    double x0 = Double.parseDouble(point1[0]);//将输入的子字符串转换成数据
                    double y0 = Double.parseDouble(point1[1]);
                    double x1 = Double.parseDouble(point2[0]);
                    double y1 = Double.parseDouble(point2[1]);
                    double x2 = Double.parseDouble(point3[0]);
                    double y2 = Double.parseDouble(point3[1]);
                    if (dj.length == 3)
                        System.out.print(Math.abs((y2 - y1) * (x0 - x1) - (x2 - x1) * (y0 - y1))//点到直线的公式
                                / Math.sqrt(Math.pow((y1 - y2), 2) + Math.pow((x1 - x2), 2)));
                    if (dj.length > 3)
                        System.out.print("wrong number of points");
                } else
                    System.out.print("Wrong Format");
            } else
                System.out.print("Wrong Format");
        } else
            System.out.print("points coincide");
    }
     void Three(String x) {
        String[] dj = x.split(" ");
        String[] point1 = dj[0].split(",");
        if (dj.length < 3)
            System.out.print("wrong number of points");
        String[] point2 = dj[1].split(",");
        String[] point3 = dj[2].split(",");
        if (!dj[1].equals(dj[2])&& !dj[0].equals(dj[2])&& !dj[0].equals(dj[1])) {
            if (point1.length == 2 && point2.length == 2 && point3.length == 2) {
                if (legal(point1[0]) && legal(point1[1]) && legal(point2[0]) && legal(point2[1]) && legal(point3[0])
                        && legal(point3[1])) {
                    double x0 = Double.parseDouble(point1[0]);
                    double y0 = Double.parseDouble(point1[1]);
                    double x1 = Double.parseDouble(point2[0]);
                    double y1 = Double.parseDouble(point2[1]);
                    double x2 = Double.parseDouble(point3[0]);
                    double y2 = Double.parseDouble(point3[1]);
                    if (dj.length == 3 &&((y2- y1) / (x0 - x1) == (y0 - y1) / (x2 - x1)||(y0- y1) / (x2 - x1) == (y2 - y1) / (x0 - x1)))//判断三点是否一线
                        System.out.print("true");
                    if ((y2- y1) / (x0 - x1) != (y0 - y1) / (x2 - x1)||(y0- y1) / (x2 - x1) != (y2 - y1) / (x0 - x1))
                        System.out.print("false");
                    if (dj.length > 3)
                        System.out.print("wrong number of points");
                } else
                    System.out.print("Wrong Format");
            } else
                System.out.print("Wrong Format");
        } else
            System.out.print("points coincide");
    }
     void Four(String x) {
        String[] dj = x.split(" ");
        String[] point1 = dj[0].split(",");
        String[] point2 = dj[1].split(",");
        if (dj.length < 4)
            System.out.print("wrong number of points");
        String[] point3 = dj[2].split(",");
        String[] point4 = dj[3].split(",");
        if (!dj[0].equals(dj[1]) && !dj[2].equals(dj[3])) {
            if (point1.length == 2 && point2.length == 2 && point3.length == 2 && point4.length == 2) {
                if (legal(point1[0]) && legal(point1[1]) && legal(point2[0]) && legal(point2[1]) && legal(point3[0])
                        && legal(point3[1]) && legal(point4[0]) && legal(point4[1])) {
                    double x0 = Double.parseDouble(point1[0]);
                    double y0 = Double.parseDouble(point1[1]);
                    double x1 = Double.parseDouble(point2[0]);
                    double y1 = Double.parseDouble(point2[1]);
                    double x2 = Double.parseDouble(point3[0]);
                    double y2 = Double.parseDouble(point3[1]);
                    double x3 = Double.parseDouble(point4[0]);
                    double y3 = Double.parseDouble(point4[1]);
                    if (dj.length == 4 && (y3 - y2) / (x3 - x2) == (y1 - y0) / (x1 - x0))
                        System.out.print("true");
                    if ((y3 - y2) / (x3 - x2) != (y1 - y0) / (x1 - x0))
                        System.out.print("false");
                    if (dj.length > 4)//点数量的判断
                        System.out.print("wrong number of points");
                } else
                    System.out.print("Wrong Format");
            } else
                System.out.print("Wrong Format");
        } else
            System.out.print("points coincide");
    }
     void Five(String x) {
        String[] dj = x.split(" ");
        String[] point1 = dj[0].split(",");
        String[] point2 = dj[1].split(",");
        if (dj.length < 4)
            System.out.print("wrong number of points");
        String[] point3 = dj[2].split(",");
        String[] point4 = dj[3].split(",");
        if (!dj[0].equals(dj[1]) && !dj[2].equals(dj[3])) {
            if (point1.length == 2 && point2.length == 2 && point3.length == 2 && point4.length == 2) {
                if (legal(point1[0]) && legal(point1[1]) && legal(point2[0]) && legal(point2[1]) && legal(point3[0])
                        && legal(point3[1]) && legal(point4[0]) && legal(point4[1])) {
                    double x0 = Double.parseDouble(point1[0]);
                    double y0 = Double.parseDouble(point1[1]);
                    double x1 = Double.parseDouble(point2[0]);
                    double y1 = Double.parseDouble(point2[1]);
                    double x2 = Double.parseDouble(point3[0]);
                    double y2 = Double.parseDouble(point3[1]);
                    double x3 = Double.parseDouble(point4[0]);
                    double y3 = Double.parseDouble(point4[1]);
                    if ((y3 - y2) / (x3 - x2) == (y1 - y0) / (x1 - x0))//线平行的情况
                        System.out.print("is parallel lines,have no intersection point");
                    else {
                        double yz = ((y0 - y1) * (y3 - y2) * x0 + (y3 - y2) * (x1 - x0) * y0//xz,yz为交点坐标
                                + (y1 - y0) * (y3 - y2) * x2 + (x2 - x3) * (y1 - y0) * y2)
                                / ((x1 - x0) * (y3 - y2) + (y0 - y1) * (x3 - x2));
                        double xz = x2 + (x3 - x2) * (yz - y2) / (y3 - y2);
                        if (dj.length == 4) {
                            System.out.print(xz + "," + yz + " ");
                            if ((y1 - y0) / (xz - x0) == (yz - y0) / (x1 - x0),
                                    || (y3 - y2) / (xz - x2) == (yz - y2) / (x3 - x2))
                                System.out.print("true");
                            else
                                System.out.print("false");
                        }
                        if (dj.length > 4)
                            System.out.print("wrong number of points");
                    }
                } else
                    System.out.print("Wrong Format");
            } else
                System.out.print("Wrong Format");
        } else
            System.out.print("points coincide");
    }
}

View Code

 

<4>第三次作业第三题

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

输入格式:

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

输出格式:

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

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

类图

 

 大概思路:

数据输入的判断同前两题一样,但难度相对上一题进一步升级,要对面的问题进行判断,有一定难度的提升

源码(具体代码分析写在注释里):

点击白框查看

import java.util.Scanner;

public class Main{
    public static void main(String[] args) {
        Scanner s = new Scanner(System.in);
        String str = s.nextLine();
        P z = new P();
        boolean a =false;
         for(int i=0;i<str.length();i++)
        if(str.charAt(i)==' ')
            a=true;
        if(str.charAt(1)!=':'||a==false)
        System.out.print("Wrong Format"); 
        else {
            if (str.charAt(0) == '1')
                z.One(str.substring(2));
            if (str.charAt(0) == '2')
                z.Two(str.substring(2));
             if (str.charAt(0) == '3')
             z.Three(str.substring(2));
             if (str.charAt(0) == '4')
             z.Four(str.substring(2));
           if (str.charAt(0) == '5') 
               z.Five(str.substring(2));
        }
    }
}
class P {
    boolean legal(String x) {
        String w = "[+-]?(\\d+)(\\.\\d+)?$";
        for (int i = 1; i < x.length(); i++) {
            if (x.charAt(0) == '0' && x.length() > 1 && x.charAt(1) != '.')
                return false;
        }
        if (x.matches(w))
            return true;
        else
            return false;
    }
    String tran(double x) {
        String str_d = String.valueOf(x);
        str_d = str_d.substring(str_d.indexOf(".") + 1);
        int len = str_d.length();
        len = len > 6 ? 6 : len;
        String out = String.format("%." + len + "f", x);
        return out;
    }
    void One(String x) {
        String[] dj = x.split(" ");
        String[] point1 = dj[0].split(",");
        if (dj.length < 3)
            System.out.print("wrong number of points");
        String[] point2 = dj[1].split(",");
        String[] point3 = dj[2].split(",");
            if (point1.length == 2 && point2.length == 2 && point3.length == 2) {
                if (legal(point1[0]) && legal(point1[1]) && legal(point2[0]) && legal(point2[1]) && legal(point3[0])
                        && legal(point3[1])) {
                    double x0 = Double.parseDouble(point1[0]);
                    double y0 = Double.parseDouble(point1[1]);
                    double x1 = Double.parseDouble(point2[0]);
                    double y1 = Double.parseDouble(point2[1]);
                    double x2 = Double.parseDouble(point3[0]);
                    double y2 = Double.parseDouble(point3[1]);
                    double a = Math.sqrt(Math.pow(y1 - y0, 2) + Math.pow(x1 - x0, 2));
                    double b = Math.sqrt(Math.pow(y2 - y0, 2) + Math.pow(x2 - x0, 2));
                    double c = Math.sqrt(Math.pow(y2 - y1, 2) + Math.pow(x2 - x1, 2));
                        if (dj.length == 3 && a + b > c && a + c > b && b + c > a) {
                            if (a == b || b == c || a == c)
                                System.out.print("true ");
                            else
                                System.out.print("false ");
                            if (a == b && b == c)
                                System.out.print("true ");
                            else
                                System.out.print("false");
                        }
                        else
                            System.out.print("data error");
                        if (dj.length > 3)
                            System.out.print("wrong number of points");
                } else
                    System.out.print("Wrong Format");
            } else
                System.out.print("Wrong Format");
    }
    void Two(String x) {
        String[] dj = x.split(" ");
        String[] point1 = dj[0].split(",");
        if (dj.length < 3)
            System.out.print("wrong number of points");
        String[] point2 = dj[1].split(",");
        String[] point3 = dj[2].split(",");
        if (point1.length == 2 && point2.length == 2 && point3.length == 2) {
            if (legal(point1[0]) && legal(point1[1]) && legal(point2[0]) && legal(point2[1]) && legal(point3[0])
                    && legal(point3[1])) {
                double x0 = Double.parseDouble(point1[0]);
                double y0 = Double.parseDouble(point1[1]);
                double x1 = Double.parseDouble(point2[0]);
                double y1 = Double.parseDouble(point2[1]);
                double x2 = Double.parseDouble(point3[0]);
                double y2 = Double.parseDouble(point3[1]);
                double a = Math.sqrt(Math.pow(y1 - y0, 2) + Math.pow(x1 - x0, 2));
                double b = Math.sqrt(Math.pow(y2 - y0, 2) + Math.pow(x2 - x0, 2));
                double c = Math.sqrt(Math.pow(y2 - y1, 2) + Math.pow(x2 - x1, 2));
                if (dj.length == 3 && a + b > c && a + c > b && b + c > a) {
                    System.out.print(tran(a + b + c) + " "
                            + tran(0.5 * c * Math.abs((y2 - y1) * (x0 - x1) - (x2 - x1) * (y0 - y1))
                                    / Math.sqrt(Math.pow((y1 - y2), 2) + Math.pow((x1 - x2), 2)))
                            + " " + tran((x0 + x1 + x2) / 3) + "," + tran((y0 + y1 + y2) / 3));
                } else
                    System.out.print("data error");
                if (dj.length > 3)
                    System.out.print("wrong number of points");
            } else
                System.out.print("Wrong Format");
        } else
            System.out.print("Wrong Format");
    }
    
    void Three(String x) {
        String[] dj = x.split(" ");
        String[] point1 = dj[0].split(",");
        if (dj.length < 3)
            System.out.print("wrong number of points");
        String[] point2 = dj[1].split(",");
        String[] point3 = dj[2].split(",");
        if (point1.length == 2 && point2.length == 2 && point3.length == 2) {
            if (legal(point1[0]) && legal(point1[1]) && legal(point2[0]) && legal(point2[1]) && legal(point3[0])
                    && legal(point3[1])) {
                double x0 = Double.parseDouble(point1[0]);
                double y0 = Double.parseDouble(point1[1]);
                double x1 = Double.parseDouble(point2[0]);
                double y1 = Double.parseDouble(point2[1]);
                double x2 = Double.parseDouble(point3[0]);
                double y2 = Double.parseDouble(point3[1]);
                double a = Math.sqrt(Math.pow(y1 - y0, 2) + Math.pow(x1 - x0, 2));
                double b = Math.sqrt(Math.pow(y2 - y0, 2) + Math.pow(x2 - x0, 2));
                double c = Math.sqrt(Math.pow(y2 - y1, 2) + Math.pow(x2 - x1, 2));
                if (dj.length == 3 && a + b > c && a + c > b && b + c > a) {
                    if (a*a + b*b < c*c||c*c+ b*b< a*a|| a*a +c*c < b*b)
                        System.out.print("true false false");
                    if (a*a + b*b ==c*c||c*c+ b*b==a*a|| a*a +c*c==b*b)//点14
                        System.out.print("false true false");
                    if (a*a + b*b >c*c&&c*c+ b*b> a*a&& a*a +c*c > b*b)
                        System.out.print("false false true");
                } else
                    System.out.print("data error");
                if (dj.length > 3)
                    System.out.print("wrong number of points");
            } else
                System.out.print("Wrong Format");
        } else
            System.out.print("Wrong Format");
    }
    void Four(String x) {
        String[] dj = x.split(" ");
        String[] point1 = dj[0].split(",");
        if (dj.length < 5)
            System.out.print("wrong number of points");
        String[] point2 = dj[1].split(",");
        String[] point3 = dj[2].split(",");
        String[] point4 = dj[3].split(",");
        String[] point5 = dj[4].split(",");
        if (!dj[1].equals(dj[0])) {
            if (point1.length == 2 && point2.length == 2 && point3.length == 2) {
                if (legal(point1[0]) && legal(point1[1]) && legal(point2[0]) && legal(point2[1]) && legal(point3[0])
                        && legal(point3[1]) && legal(point4[0]) && legal(point4[1]) && legal(point5[0])
                        && legal(point5[1])) {
                    double x0 = Double.parseDouble(point1[0]);
                    double y0 = Double.parseDouble(point1[1]);
                    double x1 = Double.parseDouble(point2[0]);
                    double y1 = Double.parseDouble(point2[1]);
                    double x2 = Double.parseDouble(point3[0]);
                    double y2 = Double.parseDouble(point3[1]);
                    double x3 = Double.parseDouble(point4[0]);
                    double y3 = Double.parseDouble(point4[1]);
                    double x4 = Double.parseDouble(point5[0]);
                    double y4 = Double.parseDouble(point5[1]);
                    double a = Math.sqrt(Math.pow(y2 - y4, 2) + Math.pow(x2 - x4, 2));
                    double b = Math.sqrt(Math.pow(y3 - y2, 2) + Math.pow(x3 - x2, 2));
                    double c = Math.sqrt(Math.pow(y4 - y3, 2) + Math.pow(x4 - x3, 2));
                    if (dj.length == 5 && a + b > c && a + c > b && b + c > a) {
                      
                    } else
                        System.out.print("data error");
                    if (dj.length > 5)
                        System.out.print("wrong number of points");
                } else
                    System.out.print("Wrong Format");
            } else
                System.out.print("Wrong Format");
        } else
            System.out.print("points coincide");
    }
    void Five(String x){} 
}

View Cod 

三、踩坑心得

1、第一次大作业

<1>了解了数据类型转换,有自动类型转换和强制类型转换,容量小的可以往容量大的转换(隐式),但容量大的往容量小的转换则需要强制转换(显式)

float k =(float) (kg / 0.45359237);
        float m =(float)(meter / 0.0254);

 

<2>当把任何基本类型和字符串值进行连接运算时,基本类型会被自动转成字符串类型,连接字符串,第二题要求找到奇数并输出,这样操作非常简单

String sum=""; 
if(a%2!=0) sum+=a;

<3>字符串相关函数非常好用,如分割字符串substring(),length()

<4>有时计算机计算会出现一小点误差,我们避免用’==’而用Math.abs(nextGuess – lastGuess)< 0.00001或许会得到想要的答案

2、第二次大作业

<1>Character类里的isDigit和isLetter很好用,可以帮助判断字符,charAt()可以对字符串里的每位进行判断操作,非常方便

<2>获取输入时,要注意nextLine()方法返回的是Enter键之前的所有字符,它可以得到带空格的字符串的。而next()会自动消去有效字符前的空格,只返回输入的字符,不能得到带空格的字符串

<3>s.close()是一个好习惯。

3、第三次大作业

<1>正则表达式的使用仍处于初级阶段,还需要认真学习

<2>判断方法和第一二题差不多,只需稍加修改就可以应用到新的题目中,缩短了编程的时间,减少了重复思考与代码重写

四、改进建议

1.第三次作业里的第二三题,代码的修改再次运用,虽然减少了重复思考的时间,但代码过长,后面要多进行实践练习

2.圈复杂度过高,if嵌套太多次,应该可以通过一个计算方法,找出相应数字的特性,通过计算得出一个数字再进行判断,后续要学习培养更好的书写习惯

3.第三次作业的第三题的第五项,仍然没找到合适的算法,希望后续学习可以将其补上

五、总结

 

       1.这三次作业难度逐渐递增,帮助我们很快的从原先C语言的面相过程跳转为现在JAVA的面相对象,初步的了解了面相对象的思考方式。但是对于每个对象究竟应该有什么属性,以及属性的公共或私有形式、每个对象具体方法的考量都不完善,后续应该加强思考如何使设计的对象有更强的可塑性,可以更方便快捷的在下次使用时完成修改。

       2.在对于JAVA庞大的类库以及相关功能还需要进一步的了解与学习,提高工作效率,方便后续功能更好更快捷的实现。

       3.作业与实验现下的难度与题量都很适合练习,可以很好地复习老师讲授的知识点,除去第三次作业7-3的某点算法上遇到了困难,其他都能有想法,写得出来代码。再有,就是希望能看下pta高分的同学的代码,来学习一下别人的优点

 

版权声明:本文为Jerryz666原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/Jerryz666/p/16124856.html