前三次PTA作业题目集总结

前三次PTA作业题目集总结

1)前言:

对于我来说,第一次作业题目量相对较多但多数相对简单,后面几题不是很明白该怎么做。第一次作业中主要包含基础的输入输出,数组,字符串的运用,而我对字符串,数组不怎么熟练,与其对应的题目也写不到。而且我写作业时发现Java很严谨,说浮点数就不能用double只能用float。我用double还疑惑为什么错,问了同学,才知道错在哪。第二次PTA作业虽然题目只有三道但是后面两题难度较难。第二次知识点包括字母字符串的转换,串口字符串的解析,String的格式判断与内容提取。我习惯将字符串转换为数组在进行计算,遇到那些长度很长且不固定的字符串就束手无策了。第三次PTA作业也只有三题,三题是相互联系的,难度逐渐提升,我也是第一次创建不同的类来解决不同的问题,我开始就是一个类直接莽。

第三次作业知识点包括正则表达式,boolean函数的应用等。

(2)设计与分析:第一次作业中的第8-二进制数字的提取。我的源码:

import java.util.Scanner;

 

public class Main {

public static void main(String[] args) {

        Scanner in = new Scanner(System.in);

        String s =in.nextLine();

        char str[] = s.toCharArray();

        int n =str.length;

        int i;

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

         int j=0;

            if(str[i]==1||str[i]==0){

                number[j]=str[i];

                j++;

            }

            if(str[i]==-1)

                break;

        }

        System.out.println(number[n]);

    }

}

我的想法是将字符串中的字母或数字带入数组中再进行运算,但是我想简单了,还有好几个测试点没过,例如字母数字混合输入就不行。我应该直接用字符串不用数组来做。

修改后代码为

import java.util.Scanner;

 

public class Main {

    public static void main(String[] args){

     Scanner in = new Scanner (System.in);

     String a = in.nextLine();

     String b = "";

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

     if(a.charAt(i)=='0'||a.charAt(i)=='1') {

     b += a.charAt(i);

     }else if(a.charAt(i)=='-') {

     if(a.charAt(i+1)=='1') {

     System.out.print(b);

     return;

     }

     }

     }

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

        }

}

相较于next我更喜欢用nextline,因为next输入遇到空格会停止,而nextline不会。

第二次作业中的7-2,我一看到题就想把字符串转化为数组来写,我写了会发现不对经,数组不好处理,还是直接用字符串写,然后发现还是不会,就是我菜。想着写一点算一点,能拿多少分就拿多少分。我的源码:import java.util.Scanner;

 

public class Main {

    public static void main(String[] args) {

        Scanner in = new Scanner(System.in);

        String a =in.nextline();

        if(a.length()<11){

            System.out.println("null data");

        }

        if(a.matches("^[1]*$")) {

System.out.print("null data");

}

        int start=0,i=0,sum=0,num=1;

        for(start=0;start<a.length()-10;start++){

            if(a.charAt(start)=='0'){

                System.out.print(num+":");

                num++;

            }

            

        }

    }

}

我就写了。长度少于11位的情况和没有初始位的情况,我真是看到那长长的一大串数字就感到头皮发麻,再加上是快截止的时间,脑袋发懵根本不会,真的是越急越不会做,我应该早点做花多一点时间。

我代码都没写完

第三次题目集;

7-1:点线形系列1-计算两点间的距离

我开始看到题目时认为应该不怎么难,动手敲代码时却不知道该如何下手,输入一个点的坐标中的“,”不知该怎么处理,后面听了老师讲的正则表达式,可以用正则表达式来处理“,”,我学了会正则表达式发现好难懂,硬着头皮写了个从字符串中提取浮点数的正则表达式。把“,”提取出来,再将数字放到数组中去。还建立了一个point类代表点的坐标,里面添加上一个求两点间距离的函数。我的源码:

import java.util.Scanner;

import java.util.regex.Matcher;

import java.util.regex.Pattern;

public class Main {

public static void main(String[] args) {

        Scanner in = new Scanner(System.in);

int count=0;

point p1=new point();

point p2=new point();

       String str=in.nextLine();

       double[]number=new double[100];

       Pattern pattern = Pattern.compile("-?([1-9]\\d*\\.?\\d*|0\\.\\d*[1-9]\\d*|0?\\.0+|0)");

        Matcher matcher = pattern.matcher(str);

        while (matcher.find()){

            String res = matcher.group();

            int n=res.length();

            if (res.length()>0){

number[count]=Double.parseDouble(res);

                count++;

            }            

        }

        if(count>=5) {

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

        }

        else {

         p1.x=number[0];

            p1.y=number[1];

            p2.x=number[2];

            p2.y=number[3];

            double r = p1.getdis(p2);

            System.out.println(r);

        }

    }

}

class point{

     double x,y;

      double getdis(point p) {

      x=this.x;

      y=this.y;

double distance=Math.sqrt((p.x-x)*(p.x-x)+(p.y-y)*(p.y-y));

return distance;

}

}

我写point类中的函数时,没把x赋值为this.x,y赋值为this.y.导致我输入数据没有得到预期的结果。当一个类的属性名与访问该属性的方法参数名相同时,则需要使用this关键词来访问类中的属性,以区分类的属性和方法中的参数。正则表达式不怎么会也就不会判断字符串的格式是否合法。我可以学习正则表达式来写一个判断格式的函数来完善我的代码。

7-2:点线形系列2-线的计算

在点的类point的前提下加一个线的类line,线由点构成,在创造一些函数来解决问题。我的代码

import java.util.Scanner;

import java.util.regex.Matcher;

import java.util.regex.Pattern;

public class Main {

public static void main(String[] args) {

        Scanner in = new Scanner(System.in);

int count=0;

int a=0;

point p1=new point();

point p2=new point();

point p3=new point();

point p4=new point();

line l1=new line();

       String str=in.nextLine();

       double[]number=new double[100];

       Pattern pattern = Pattern.compile("-?([1-9]\\d*\\.?\\d*|0\\.\\d*[1-9]\\d*|0?\\.0+|0)");

        Matcher matcher = pattern.matcher(str);

        while (matcher.find()){

            String res = matcher.group();

            int n=res.length();

            if (res.length()>0){

number[count]=Double.parseDouble(res);

                count++;

            }            

        }

         a=(int)number[0];

         p1.x=number[1];

            p1.y=number[2];

            p2.x=number[3];

            p2.y=number[4];

            p3.x=number[5];

            p3.y=number[6];

            p4.x=number[7];

            p4.y=number[8];

            //double r = p1.getdis(p2);

            if(a==1) {

             l1.Getslope(p1,p2);

            }

             if(a==2) {

              l1.Dis(p1, p2, p3);

             }

            if(a==3) {

              System.out.println(l1.isOnline(p1, p2, p3));

             }

    }

  

    

}

class point{

     double x;

double y;

      /*double getdis(point p) {

      x=this.x;

      y=this.y;

double distance=Math.sqrt((p.x-x)*(p.x-x)+(p.y-y)*(p.y-y));

return distance;

}*/

    }

class line{

     point p1,p2,p3;

     void Getslope(point p1,point p2){

     //point p=new point();

    

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

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

     }

     else if(p1.x==p2.x&&p1.y!=p2.y){

     System.out.println("Slope does not exist");

     }

     else {

     double slope=(p2.y-p1.y)/(p2.x-p1.x);

     System.out.println(slope);

     }

     //return 0;

     }

     void Dis(point p1,point p2,point p3) {

     double k=(p2.y-p3.y)/(p2.x-p3.x);

     double c=p2.y-k*p2.x;

     double s;

     if(p2.x==p3.x&&p2.y!=p3.y) {

     s=Math.abs(p1.x-p2.x);

     }

     else {

     s=Math.abs(p1.y-k*p1.x-c)/(Math.sqrt(1+k*k));

     }

      System.out.println(s);

     }

    boolean isOnline(point p1,point p2,point p3) {

     double k1,k2;

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

     k2=(p1.y-p3.y)/(p1.x-p3.x);

     if(p1.x==p2.x&&p2.x==p3.x&&p1.y!=p2.y&&p1.y!=p3.y&&p2.y!=p3.y) {

return true;

     }

     else if(k1==k2){

     return true;

     }

     else {

     return false;

     }

    }

}

由于写的时间较晚,时间截止了,还有部分问题的代码没写出来。还有格式问题同7-1.

7-3:点线形系列3-三角形的计算

7-2的前提下建立三角形的类,三角形由三个点构成。在三角形的类中创造函数。由于时间不够一点代码都没写,下次一定控制好自己的时间。

总结:

我开始写代码是面对过程不是面对对象,学到了该如何面对对象写代码,我需要在字符串上下大工夫,学习正则表达式来判断格式。自己也要调整好自己的心态,控制好自己的时间,要多花时间,不是像对待c那样对待Java,那样作业会很难完成。我感觉作业不错,难度逐步提升,知识点也多,起到巩固且加深的作用。实验我也能从中学到不少有关Java的知识。老师博学多才,自己出的题测试点也多。课上应该多出问题来巩固知识点。课下没什么意见。

posted @ 2022-04-11 11:49  莫得莫得  阅读(150)  评论(0)    收藏  举报