pta作业前三次总结

Java三次作业大总结的博客

  1. pta第一次大作业总结

这次习题集总共有9个题目,个人认为pta第一次大作业的题目普遍简单,但我在第一次作业唯一失去一分的题目为二进制数值提取也即是第一次作业的第八题,一分少于输入的格式没有判断,因为在二进制失去了宝贵的一分,所以个人认为二进制的数值提取对于我来说还是比较陌生,难度比较大.第一题就是BMI测算,学会了简单的switch格式.第二题就是考察了长度质量计算单位换算,普通的加减乘除算法法则。第三题就是简单的求输入数列中所有奇数的和,利用了简单的求和法则与循环。第四题使用了多个if else 条件来进行判断要输入输出的数据。第五题游戏角色选择,调用了switch语句有利于自己角色的选择与判断输入格式是否符合规范。第六题也就是学号识别,利用了一系列字符串来输出学校的学号的意义。第七题也就是简单的巴比伦法求平方根近似值的简单算法,根据题目已给的算法进行代码转换为算法。第九题就是根据输入的三边来判断三角形类型也是使用了多个if else 的条件。

  1. pta第二次作业总结

这次作业总共有三个题目,三个题目难度普遍普通。第一题让字母与数字进行转换,我个人认为这道题我写的不太完美,因为我就是使用了多个if else多个条件进行打表输出,没有使用字符转换为ASCII码值的方法。

第二题进行串口字符解析,把0,1组成的二进制数据流根据题目给的要求进行输出题目所要的答案,仍然方法笨重没有创建新奇的用法,简简单单的if else 算法。第三题又是进行学校学生学号的格式判断与内容提取,同样也是使用了多个if else条件没有新意。

  1. pta第三次作业总结

这次作业虽然与第二次作业是相同的题量,但是三个题目难度与第二次作业完全不相同。一二三题个人认为都非常的难,没有一个拿到高分,都拿了一些基础该拿的分数。第一题就是计算两点坐标之间的距离,运用了Double.parsedouble还有if里面条件的字符比较,charat,length,数组等多个功能代码.第二个题目的输出量较多且判断条件较为复杂,进行了题目的条件判断,跟第一题的条件判断的格式差不多,运用的知识点也差不多,只不过第二题条件有点苛刻。第三题与一二题判断条件的格式差不多,但我运用了正则表达式大大简化了代码,比一二题代码更简洁判断条理清晰简洁。

 

三次大作业的难度逐步提升,但考察的知识多样化,层层深透更有利于我们这些初学者学习好java的使用原则与方法,让我更加深刻的理解Java类与方法之间的关系,从而更加了解面向对象的设计原则。

 

三次题目集的得分情况:

第一次作业:99

第二次作业:61

第三次作业:52

 

*设计与分析

一、第二次作业的第二题

题目的源代码

import java.util.Scanner;
public class Main {
    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        String sc = input.nextLine();
        if(sc.length()<11) {
            System.out.println("null data");
            return;
        }
        else {
            int flag=0;
            int csgo=0;
            int go=0;
            for(int i = 0;i<sc.length();i++) {
                if(sc.charAt(i)=='1') {
                    go++;
                }
                else {
                    continue;
                }
            }
            if(go==sc.length()) {
                System.out.println("null data");
                return;
            }else {
            for(int i = 0;i<sc.length();) {
                if(sc.charAt(i)=='0') {
                    flag=0;
                    String sq = sc.substring(i+1, i+10);
                    for(int j=0;j<sq.length();j++) {
                        if(sq.charAt(j)=='1') {
                            flag++;
                        }else {
                            continue;
                        }
                    }
                    if((flag%2!=0)&&(sc.charAt(i+10)=='1')) {
                        csgo++;
                        System.out.println(csgo+":"+sc.substring(i+1, i+9));
                        i+=11;
                        if((sc.length()-i)<11) {
                            return;
                        }
                        continue;
                    }
                    if(((flag%2!=0)&&(sc.charAt(i+10)!='1'))||((flag%2==0)&&(sc.charAt(i+10)!='1'))) {
                        csgo++;
                        System.out.println(csgo+":"+"validate error");
                        i+=11;
                        if((sc.length()-i)<11) {
                            return;
                        }
                        continue;
                    }
                     if((flag%2==0)&&(sc.charAt(i+10)=='1')) {
                         csgo++;
                        System.out.println(csgo+":"+"parity check error");
                        i+=11;
                        if((sc.length()-i)<11) {
                            return;
                        }
                        continue;
                    }
                }
                else
                    i++;
            }
               
            }
        }
    }
}

个人认为这个题目难度适中,这个题目主要考察的就是串口字符串的解析,没有创造多个类进行分析导致自己的代码比较复杂不够简单,使用了多个普通的ifelse条件题目要求:

 

①根据题目的输入数据进行位数判断不足11位或者输入数据全1没有起始位,则输出"null data"。

if(sc.length()<11) {
            System.out.println("null data");
            return;
        }
        else {
            int flag=0;
            int csgo=0;
            int go=0;
            for(int i = 0;i<sc.length();i++) {
                if(sc.charAt(i)=='1') {
                    go++;
                }
                else {
                    continue;
                }
            }
            if(go==sc.length()) {
                System.out.println("null data");
                return;
            }

②某个数据全都符合题目要求的条件只是某个数据的结束符不为1或者数据结束符和奇偶校验均不合格,则输出“validate error”。

                    if(((flag%2!=0)&&(sc.charAt(i+10)!='1'))||((flag%2==0)&&(sc.charAt(i+10)!='1'))) {
                        csgo++;
                        System.out.println(csgo+":"+"validate error");
                        i+=11;
                        if((sc.length()-i)<11) {
                            return;
                        }
                        continue;
                    }

③输入的某个数据奇偶校验错误,则输出“parity check error”。

                     if((flag%2==0)&&(sc.charAt(i+10)=='1')) {
                         csgo++;
                        System.out.println(csgo+":"+"parity check error");
                        i+=11;
                        if((sc.length()-i)<11) {
                            return;
                        }
                        continue;
                    }
                }

本人认为这道题考察的就是要从字符串中找出我们所需要的数据从而进行输出,考察知识点多是字符串章节中的字符功能函数的调用,这道题的难度虽然中等但它可以考察的知识点比较全面,适合没有基础的初学者且能加深初学者的学习记忆,边写题目的时候边复习所学过的知识点。

第三次作业的第一题源代码如下:

import java.util.Scanner;
public class Main {
    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        String ac = input.nextLine();
        for(int i=0;i<ac.length();i++) {
            if(ac.charAt(i)=='.'||ac.charAt(i)==' '||ac.charAt(i)==','||ac.charAt(i)=='+'||ac.charAt(i)=='-'||(ac.charAt(i)>='0'&&ac.charAt(i)<='9')) {
                continue;
            }else {
                System.out.println("Wrong Format");
                return;
            }
        }
        for(int i=0;i<ac.length();i++) {
            if(ac.charAt(i)=='0') {
                if(ac.charAt(i+1)!='.'&&ac.charAt(i+1)!=',') {
                    System.out.println("Wrong Format");
                    return;
                }
            }
        }
        for(int i=0;i<ac.length();i++) {
            if(ac.charAt(i)==' ') {
                if(ac.charAt(i+1)=='+'||ac.charAt(i+1)=='-') {
                    if(ac.charAt(i+2)>='0'&&ac.charAt(i+2)<='9') {
                        
                    }
                    if(ac.charAt(i+2)=='+'||ac.charAt(i+2)=='-') {
                        System.out.println("Wrong Format");
                        return;
                    }
                }
                if(ac.charAt(i+1)>='0'&&ac.charAt(i+1)<='9') {
                    
                }
            }
        }
        String[] ad = ac.split("\\s");
        for(int i = 0;i<ad.length;i++) {
            if(ad[i].charAt(i)=='+'||ad[i].charAt(i)=='-') {
                if(ad[i].charAt(i+1)<'0'||ad[i].charAt(i+1)>'9') {
                    System.out.println("Wrong Format");
                    return;
                }
            }
            if(ad[i].charAt(i)==',') {
                if(ad[i].charAt(i+1)=='-'||ad[i].charAt(i+1)=='+'||(ad[i].charAt(i+1)>='0'&&ad[i].charAt(i+1)<='9')) {
                    
                }else {
                    System.out.println("Wrong Format");
                    return;
                }
            }
            if(ad[i].charAt(i)=='.') {
                if((ad[i].charAt(i+1)<'0')&&(ad[i].charAt(i+1)>'9')) {
                    System.out.println("Wrong Format");
                    return;
                }
            }
        }
        if(ad.length!=2) {
            System.out.println("wrong number of points");
            return;
        }else {
            String[] qq = ad[0].split(",");
            String[] qa = ad[1].split(",");
            String[] qs = new String[2];
            String[] qw = new String[2];
            for(int k=0;k<qq.length;k++) {
                qs[k] = qq[k];
            }
            for(int j=0;j<qa.length;j++) {
                qw[j] = qa[j]; 
            }
            double x1 = Double.parseDouble(qs[0]);
            double y1 = Double.parseDouble(qs[1]);
            double x2 = Double.parseDouble(qw[0]);
            double y2 = Double.parseDouble(qw[1]);
            double end = Math.sqrt(Math.pow(x1-x2,2) + Math.pow(y1-y2,2));
            System.out.println(end);
        }
    }
}

这道题没有拿满分,没有考虑到输入格式错误的测试点。同时这道题是这次作业三道题里面最简单的也是其他两道题的基础,以它为基础才能完成接下来的两个题目,这道题也同时没有创造多个类而是选择在一个类中去完成题目的要求.

①测试输入的格式是否正确从而判断输出"Wrong Format";

for(int i=0;i<ac.length();i++) {
            if(ac.charAt(i)=='.'||ac.charAt(i)==' '||ac.charAt(i)==','||ac.charAt(i)=='+'||ac.charAt(i)=='-'||(ac.charAt(i)>='0'&&ac.charAt(i)<='9')) {
                continue;
            }else {
                System.out.println("Wrong Format");
                return;
            }
        }
        for(int i=0;i<ac.length();i++) {
            if(ac.charAt(i)=='0') {
                if(ac.charAt(i+1)!='.'&&ac.charAt(i+1)!=',') {
                    System.out.println("Wrong Format");
                    return;
                }
            }
        }
        for(int i=0;i<ac.length();i++) {
            if(ac.charAt(i)==' ') {
                if(ac.charAt(i+1)=='+'||ac.charAt(i+1)=='-') {
                    if(ac.charAt(i+2)>='0'&&ac.charAt(i+2)<='9') {
                        
                    }
                    if(ac.charAt(i+2)=='+'||ac.charAt(i+2)=='-') {
                        System.out.println("Wrong Format");
                        return;
                    }
                }
                if(ac.charAt(i+1)>='0'&&ac.charAt(i+1)<='9') {
                    
                }
            }
        }
        String[] ad = ac.split("\\s");
        for(int i = 0;i<ad.length;i++) {
            if(ad[i].charAt(i)=='+'||ad[i].charAt(i)=='-') {
                if(ad[i].charAt(i+1)<'0'||ad[i].charAt(i+1)>'9') {
                    System.out.println("Wrong Format");
                    return;
                }
            }
            if(ad[i].charAt(i)==',') {
                if(ad[i].charAt(i+1)=='-'||ad[i].charAt(i+1)=='+'||(ad[i].charAt(i+1)>='0'&&ad[i].charAt(i+1)<='9')) {
                    
                }else {
                    System.out.println("Wrong Format");
                    return;
                }
            }
            if(ad[i].charAt(i)=='.') {
                if((ad[i].charAt(i+1)<'0')&&(ad[i].charAt(i+1)>'9')) {
                    System.out.println("Wrong Format");
                    return;
                }
            }
        }

自己的判断输入的格式是否合法比较复杂花费的代码行数太多了,一开始就是看输入的标点符号与数字是否符合题目要求,然后在判断输入的数字与符号是否符合正常的输入方式,接着就是使用了split函数功能的分隔接连使用了两次,第一次按着":"进行分隔,第二次是使用了","分成了两个字符串坐标接着使用了Double.parseDouble函数转化为double类型的数字进行了一系列数字计算距离.

②分隔符号的使用

String[] ad = ac.split("\\s");
String[] qq = ad[0].split(",");
String[] qa = ad[1].split(",");
String[] qs = new String[2];
String[] qw = new String[2];

③把字符串转化为double类型的数据且进行了数据计算距离

double x1 = Double.parseDouble(qs[0]);
double y1 = Double.parseDouble(qs[1]);
double x2 = Double.parseDouble(qw[0]);
double y2 = Double.parseDouble(qw[1]);
double end = Math.sqrt(Math.pow(x1-x2,2) + Math.pow(y1-y2,2));

 

第二题的源代码如下

import java.util.Scanner;
public class Main {
    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        String whh = input.nextLine();
        for(int i=0;i<whh.length();i++) {
            if(whh.charAt(i)=='.'||whh.charAt(i)==' '||whh.charAt(i)==','||whh.charAt(i)==':'||whh.charAt(i)=='+'||whh.charAt(i)=='-'||(whh.charAt(i)>='0'&&whh.charAt(i)<='9')) {
                
            }else {
                System.out.println("Wrong Format");
                return;
            }
        }
        int count = 0;
        for(int i=0;i<whh.length();i++) {
            if(whh.charAt(i)==' ') {
                count++;
            }
        }
        if(whh.charAt(whh.length()-1)==' ') {
            count--;
        }
        if(count==1) {
            if(whh.charAt(0)=='1'&&whh.charAt(1)==':') {
                
            }else {
                System.out.println("Wrong Format");
                return;
            }
            int know = 1;
            know= normal(whh);
            if(know==0) {
                System.out.println("Wrong Format");
                return;
            }
            String[] az = whh.split(":");
            int know1 = normal1(az);
            if(know1 == 0) {
                System.out.println("Wrong Format");
                return;
            }
            String[] ad = az[1].split("\\s");
            if(ad.length!=2) {
                System.out.println("wrong number of points");
                return;
            }else {
                String[] qq = ad[0].split(",");
                String[] qa = ad[1].split(",");
                String[] qs = new String[2];
                String[] qw = new String[2];
                for(int k=0;k<qq.length;k++) {
                    qs[k] = qq[k];
                }
                for(int j=0;j<qa.length;j++) {
                    qw[j] = qa[j]; 
                }
                double x1 = Double.parseDouble(qs[0]);
                double y1 = Double.parseDouble(qs[1]);
                double x2 = Double.parseDouble(qw[0]);
                double y2 = Double.parseDouble(qw[1]);
                if((x1==x2)&&(y1==y2)) {
                    System.out.println("points coincide");
                }
                if((x1==x2)&&(y1!=y2)) {
                    System.out.println("Slope does not exist");
                }
                if((x1!=x2)&&(y1!=y2)) {
                    double z = (y1-y2)/(x1-x2);
                    System.out.println(z);
                }
            }
        }
        if(count==2) {
            if(whh.charAt(0)=='2'&&whh.charAt(1)==':') {
                int know = 1;
                know= normal(whh);
                if(know==0) {
                    System.out.println("Wrong Format");
                    return;
                }
                String[] az = whh.split(":");
                int know1 = normal1(az);
                if(know1 == 0) {
                    System.out.println("Wrong Format");
                    return;
                }
                String[] ad = az[1].split("\\s");
                if(ad.length!=3) {
                    System.out.println("wrong number of points");
                    return;
                }else {
                    String[] qq = ad[0].split(",");
                    String[] qa = ad[1].split(",");
                    String[] qx = ad[2].split(",");
                    String[] qs = new String[2];
                    String[] qw = new String[2];
                    String[] qz = new String[2];
                    for(int k=0;k<qq.length;k++) {
                        qs[k] = qq[k];
                    }
                    for(int j=0;j<qa.length;j++) {
                        qw[j] = qa[j]; 
                    }
                    for(int j=0;j<qx.length;j++) {
                        qz[j] = qx[j];
                    }
                    double x1 = Double.parseDouble(qs[0]);
                    double y1 = Double.parseDouble(qs[1]);
                    double x2 = Double.parseDouble(qw[0]);
                    double y2 = Double.parseDouble(qw[1]);
                    double x3 = Double.parseDouble(qz[0]);
                    double y3 = Double.parseDouble(qz[1]);
                    if(x1==x2) {
                         System.out.println(Math.abs(x3-x2));
                         return ;
                     }
                     else if(y1==y2) {
                         System.out.println(Math.abs(y3-y1));
                         return ;
                     }
                     else {
                         double zx = Math.sqrt(Math.pow(x2-x1, 2) + Math.pow(y2-y1, 2));
                         double zz = Math.abs((x3-x1)*(y2-y1)-(y3-y1)*(x2-x1))/zx;
                         System.out.println(zz);
                     }
            }
            }else if(whh.charAt(0)=='3'&&whh.charAt(1)==':'){
                int know = 1;
                know= normal(whh);
                if(know==0) {
                    System.out.println("Wrong Format");
                    return;
                }
                String[] az = whh.split(":");
                int know1 = normal1(az);
                if(know1 == 0) {
                    System.out.println("Wrong Format");
                    return;
                }
                String[] ad = az[1].split("\\s");
                if(ad.length!=3) {
                    System.out.println("wrong number of points");
                    return;
                }else {
                    String[] qq = ad[0].split(",");
                    String[] qa = ad[1].split(",");
                    String[] qx = ad[2].split(",");
                    String[] qs = new String[2];
                    String[] qw = new String[2];
                    String[] qz = new String[2];
                    for(int k=0;k<qq.length;k++) {
                        qs[k] = qq[k];
                    }
                    for(int j=0;j<qa.length;j++) {
                        qw[j] = qa[j]; 
                    }
                    for(int j=0;j<qx.length;j++) {
                        qz[j] = qx[j];
                    }
                    double x1 = Double.parseDouble(qs[0]);
                    double y1 = Double.parseDouble(qs[1]);
                    double x2 = Double.parseDouble(qw[0]);
                    double y2 = Double.parseDouble(qw[1]);
                    double x3 = Double.parseDouble(qz[0]);
                    double y3 = Double.parseDouble(qz[1]);
                     if(x1==x2&&x2==x3){
                            System.out.println("true");
                            return ;
                        }
                        else if(y1==y2&&y2==y3){
                            System.out.println("true");
                            return ;
                        }
                        double k1 = (y1 - y2)/(x1 - x2);
                        double k2 = (y2 - y3)/(x2 - x3);
                        if(k1 == k2) {
                            System.out.println("true");
                            return;
                        }
                        else {
                            System.out.println("false");
                            return;
                        }
            }
        }
            else {
                System.out.println("Wrong Format");
                return;
            }
    }
        if(count==3) {
            String whz = whh.trim();
            if(whz.charAt(0)=='4'&&whz.charAt(1)==':') {
                int know = 1;
                know= normal(whz);
                if(know==0) {
                    System.out.println("Wrong Format");
                    return;
                }
                String[] az = whz.split(":");
                int know1 = normal1(az);
                if(know1 == 0) {
                    System.out.println("Wrong Format");
                    return;
                }
                String[] ad = az[1].split("\\s");
                if(ad.length!=4) {
                    System.out.println("wrong number of points");
                    return;
                }else {
                    String[] qq = ad[0].split(",");
                    String[] qa = ad[1].split(",");
                    String[] qx = ad[2].split(",");
                    String[] qi = ad[3].split(",");
                    String[] qs = new String[2];
                    String[] qw = new String[2];
                    String[] qz = new String[2];
                    String[] qu = new String[2];
                    for(int k=0;k<qq.length;k++) {
                        qs[k] = qq[k];
                    }
                    for(int j=0;j<qa.length;j++) {
                        qw[j] = qa[j]; 
                    }
                    for(int j=0;j<qx.length;j++) {
                        qz[j] = qx[j];
                    }
                    for(int k=0;k<qi.length;k++) {
                        qu[k] = qi[k];
                    }
                    double x1 = Double.parseDouble(qs[0]);
                    double y1 = Double.parseDouble(qs[1]);
                    double x2 = Double.parseDouble(qw[0]);
                    double y2 = Double.parseDouble(qw[1]);
                    double x3 = Double.parseDouble(qz[0]);
                    double y3 = Double.parseDouble(qz[1]);
                    double x4 = Double.parseDouble(qu[0]);
                    double y4 = Double.parseDouble(qu[1]);
                    double k1 = (y1 - y2)/(x1 - x2);
                    double k2 = (y3 - y4)/(x3 - x4);
                    if(k1 == k2) {
                        System.out.println("true");
                    }
                    else {
                        System.out.println("false");
                    }
                }
        }else if(whz.charAt(0)=='5'&&whz.charAt(1)==':') {
            int know = 1;
            know= normal(whz);
            if(know==0) {
                System.out.println("Wrong Format");
                return;
            }
            String[] az = whz.split(":");
            int know1 = normal1(az);
            if(know1 == 0) {
                System.out.println("Wrong Format");
                return;
            }
            String[] ad = az[1].split("\\s");
            if(ad.length!=4) {
                System.out.println("wrong number of points");
                return;
            }else {
                String[] qq = ad[0].split(",");
                String[] qa = ad[1].split(",");
                String[] qx = ad[2].split(",");
                String[] qi = ad[3].split(",");
                String[] qs = new String[2];
                String[] qw = new String[2];
                String[] qz = new String[2];
                String[] qu = new String[2];
                for(int k=0;k<qq.length;k++) {
                    qs[k] = qq[k];
                }
                for(int j=0;j<qa.length;j++) {
                    qw[j] = qa[j]; 
                }
                for(int j=0;j<qx.length;j++) {
                    qz[j] = qx[j];
                }
                for(int k=0;k<qi.length;k++) {
                    qu[k] = qi[k];
                }
                double x1 = Double.parseDouble(qs[0]);
                double y1 = Double.parseDouble(qs[1]);
                double x2 = Double.parseDouble(qw[0]);
                double y2 = Double.parseDouble(qw[1]);
                double x3 = Double.parseDouble(qz[0]);
                double y3 = Double.parseDouble(qz[1]);
                double x4 = Double.parseDouble(qu[0]);
                double y4 = Double.parseDouble(qu[1]);
                double k1 = (y1 - y2)/(x1 - x2);
                double k2 = (y3 - y4)/(x3 - x4);
                if(k1==k2 ) {
                    System.out.println("is parallel lines,have no intersection point");
                    return ;
                }
                else {
                    double x0 = ((x3-x4) * (x2*y1 - x1*y2) - (x1-x2) * (x4*y3 - x3*y4)) / ((x3-x4) * (y1-y2) - (x1-x2) * (y3-y4));
                    double y0 = ((y3-y4) * (y2*x1 - y1*x2) - (y1-y2) * (y4*x3 - y3*x4)) / ((y3-y4) * (x1-x2) - (y1-y2) * (x3-x4));
                    System.out.print(x0+","+y0+" ");
                    if(x0<Math.max(x1,Math.max(x2,Math.max(x3,x4)))&&y0<Math.max(y1,Math.max(y2,Math.max(y3,y4)))&&y0>Math.min(y1,Math.min(y2,Math.min(y3,y4)))&&x0>Math.min(x1,Math.min(x2,Math.min(x3,x4)))){
                        System.out.print("true");
                    }
                    else {
                        System.out.print("false");
                    }
                }
            }
        }else {
            System.out.println("Wrong Format");
            return;
        }
        }
}
    public static int normal(String whh) {
        int flag = 1;
        for(int i=2;i<whh.length();i++) {
            if(whh.charAt(i)=='0') {
                if((i+1)<whh.length()) {
                if(whh.charAt(i+1)!='.'&&whh.charAt(i+1)!=','&&whh.charAt(i+1)!=' ') {
                    return flag=0;
                }
            }
            }
        }
        for(int i=2;i<whh.length();i++) {
            if(whh.charAt(i)==' ') {
                if(whh.charAt(i+1)=='+'||whh.charAt(i+1)=='-') {
                    if(whh.charAt(i+2)>='0'&&whh.charAt(i+2)<='9') {
                        
                    }
                    if(whh.charAt(i+2)=='+'||whh.charAt(i+2)=='-') {
                        return flag=0;
                    }
                }
                if(whh.charAt(i+1)>='0'&&whh.charAt(i+1)<='9') {
                    
                }
            }
        }
        return flag;
    }
    public static int normal1(String[] az) {
        int num = 1;
        String[] ad = az[1].split("\\s");
        for(int i=0;i<ad.length;i++) {
            for(int j=0;j<ad[i].length();j++) {
                if(ad[i].charAt(j)=='+'||ad[i].charAt(j)=='-') {
                    if(ad[i].charAt(j+1)<'0'||ad[i].charAt(j+1)>'9') {
                        return num = 0;
                    }
                }
                if(ad[i].charAt(j)==',') {
                    if(ad[i].charAt(j+1)=='-'||ad[i].charAt(j+1)=='+'||(ad[i].charAt(j+1)>='0'&&ad[i].charAt(j+1)<='9')) {
                        
                    }else {
                      System.out.println("Wrong Format");
                        return num = 0;
                }
            }
                if(ad[i].charAt(j)=='.') {
                if((ad[i].charAt(j+1)<'0')&&(ad[i].charAt(j+1)>'9')) {
                    System.out.println("Wrong Format");
                    return num = 0;
                }
            }
        }    
        }
        return num;
    }
}

第二题其实就是以第一题为基础慢慢深入,计算多个坐标所形成的直线或者距离或者平行或者求交点坐标,比第一题多的就是创造了两个方法以便与调用重复的代码。

方法代码如下:①

public static int normal(String whh) {
        int flag = 1;
        for(int i=2;i<whh.length();i++) {
            if(whh.charAt(i)=='0') {
                if((i+1)<whh.length()) {
                if(whh.charAt(i+1)!='.'&&whh.charAt(i+1)!=','&&whh.charAt(i+1)!=' ') {
                    return flag=0;
                }
            }
            }
        }
        for(int i=2;i<whh.length();i++) {
            if(whh.charAt(i)==' ') {
                if(whh.charAt(i+1)=='+'||whh.charAt(i+1)=='-') {
                    if(whh.charAt(i+2)>='0'&&whh.charAt(i+2)<='9') {
                        
                    }
                    if(whh.charAt(i+2)=='+'||whh.charAt(i+2)=='-') {
                        return flag=0;
                    }
                }
                if(whh.charAt(i+1)>='0'&&whh.charAt(i+1)<='9') {
                    
                }
            }
        }
        return flag;
    }

方法:②

    public static int normal1(String[] az) {
        int num = 1;
        String[] ad = az[1].split("\\s");
        for(int i=0;i<ad.length;i++) {
            for(int j=0;j<ad[i].length();j++) {
                if(ad[i].charAt(j)=='+'||ad[i].charAt(j)=='-') {
                    if(ad[i].charAt(j+1)<'0'||ad[i].charAt(j+1)>'9') {
                        return num = 0;
                    }
                }
                if(ad[i].charAt(j)==',') {
                    if(ad[i].charAt(j+1)=='-'||ad[i].charAt(j+1)=='+'||(ad[i].charAt(j+1)>='0'&&ad[i].charAt(j+1)<='9')) {
                        
                    }else {
                      System.out.println("Wrong Format");
                        return num = 0;
                }
            }
                if(ad[i].charAt(j)=='.') {
                if((ad[i].charAt(j+1)<'0')&&(ad[i].charAt(j+1)>'9')) {
                    System.out.println("Wrong Format");
                    return num = 0;
                }
            }
        }    
        }
        return num;
    }
}

就是使用了简单的如下代码:

if(count==1) {
            if(whh.charAt(0)=='1'&&whh.charAt(1)==':') {
                
            }else {
                System.out.println("Wrong Format");
                return;
            }

才能进入各个代码的功能选项,然后思路跟第一题都差不多,都是先检查是否合法然后再去输入与转换.

第三题的判断与输入的规律差不多,但是我简化了代码使用了正则表达式,让代码比一二题更简单了且判断输入的格式是否合法更有效且正确.

正则表达式如下:

sx[i].matches("^(\\+?|-?)(((0\\.|[1-9]{1}[0-9]*\\.)[0-9]+)|(0)|([1-9]{1}[0-9]*)),(\\+?|-?)(((0\\.|[1-9]{1}[0-9]*\\.)[0-9]+)|(0)|([1-9]{1}[0-9]*))$")

采坑心得:①第三次作业的第一题输入格式错误就是没有一个判断00这个也不符合题目的要求因此少拿了两分

for(int i=0;i<ac.length();i++) {
            if(ac.charAt(i)=='0') {
                if(ac.charAt(i+1)!='.'&&ac.charAt(i+1)!=',') {
                    System.out.println("Wrong Format");
                    return;
                }
            }
        }

00这个数字没有考虑到因此少了一分

②第三次作业的第二题题目的输入案例也就是输入的数据有点坑,后面多了一个空格,因此也要判断输入的数据后面是否为空以及空格

        for(int i=0;i<whh.length();i++) {
            if(whh.charAt(i)==' ') {
                count++;
            }
        }
        if(whh.charAt(whh.length()-1)==' ') {
            count--;
        }

我本来判断坐标的数量就是靠空格判断的,因此输入案例的数据后面多了个空格导致我的代码也就无法进入我想要判断的代码,因此加入了这几行代码就可以避免了输入的数据后面为空格也可以进入对应的代码里面去。

改进建议:

我个人觉得我的第二次作业的第一题比较复杂也就是字符与数字的转换我就是傻傻的打表计算

        for (int i = 0; i < zi.length; i++) {
                if (zi[i] == 'a' || zi[i] == 'A') {
                    System.out.print(1);
                } else if (zi[i] == 'b' || zi[i] == 'B') {
                    System.out.print(2);
                } else if (zi[i] == 'c' || zi[i] == 'C') {
                    System.out.print(3);
                } else if (zi[i] == 'd' || zi[i] == 'D') {
                    System.out.print(4);
                } else if (zi[i] == 'e' || zi[i] == 'E') {
                    System.out.print(5);
                } else if (zi[i] == 'f' || zi[i] == 'F') {
                    System.out.print(6);
                } else if (zi[i] == 'g' || zi[i] == 'G') {
                    System.out.print(7);
                } else if (zi[i] == 'h' || zi[i] == 'H') {
                    System.out.print(8);
                } else if (zi[i] == 'i' || zi[i] == 'I') {
                    System.out.print(9);
                } else if (zi[i] == 'j' || zi[i] == 'J') {
                    System.out.print(10);
                } else if (zi[i] == 'k' || zi[i] == 'K') {
                    System.out.print(11);
                } else if (zi[i] == 'l' || zi[i] == 'L') {
                    System.out.print(12);
                } else if (zi[i] == 'm' || zi[i] == 'M') {
                    System.out.print(13);
                } else if (zi[i] == 'n' || zi[i] == 'N') {
                    System.out.print(14);
                } else if (zi[i] == 'o' || zi[i] == 'O') {
                    System.out.print(15);
                } else if (zi[i] == 'p' || zi[i] == 'P') {
                    System.out.print(16);
                } else if (zi[i] == 'q' || zi[i] == 'Q') {
                    System.out.print(17);
                } else if (zi[i] == 'r' || zi[i] == 'R') {
                    System.out.print(18);
                } else if (zi[i] == 's' || zi[i] == 'S') {
                    System.out.print(19);
                } else if (zi[i] == 't' || zi[i] == 'T') {
                    System.out.print(20);
                } else if (zi[i] == 'u' || zi[i] == 'U') {
                    System.out.print(21);
                } else if (zi[i] == 'v' || zi[i] == 'V') {
                    System.out.print(22);
                } else if (zi[i] == 'w' || zi[i] == 'W') {
                    System.out.print(23);
                } else if (zi[i] == 'x' || zi[i] == 'X') {
                    System.out.print(24);
                } else if (zi[i] == 'y' || zi[i] == 'Y') {
                    System.out.print(25);
                } else {
                    System.out.print(26);
                }
            }

改进的代码就可以不必进行打表运算,代码简洁易懂:

for(int i=6;i<s.tength0;i+  char t=s.charAt(i);
if(t>='a'&&t<='z'){
x[cnt]=t-'a'+1;  cnt++;
}elseif(t>='A'&&t<='Z'){  x[cnt]=t-'A'+1;
cnt++;
}else{
flag=0;
break;
}
]

总结:

三次作业明显显示出了我的代码不够紧密,写出的代码多个破绽,一直边调试边写,Java基础的知识不够熟练需要多加练习与学习,需要课后经常多加练习Java的基础题目,写的代码也比较复杂和经常在同一个类中写代码,复杂不易懂且漏洞百出。但也更好的了解到字符串更好的使用,也在线下学会了ASCII与数字进行转换。在pta上学会了一些基础的算法,如巴比伦算法。这三次实验也强化了方法的调用,加强了方法调用的记忆,也渐渐去了解了面向对象的过程.

posted @ 2022-04-10 13:37  small,doki  阅读(43)  评论(0)    收藏  举报