• pta作业·博客第二篇


         

    本次pta作业主要围绕正则表达式和类的继承,多态等知识点进行编码,我先说一下各次作业的大概内容和所用到的主要知识点。第一次pta三道题分别是水文校验,求圆周率,和图形继承,主要让我们深入了解抽象列和正则表达式。第二次pta作业两道题分别是图形继承类和多态还有一元多项式求导,用到的主要知识为继承和多态,还有正则表达式的运用。第三次pta作业两道题分别是图形卡片类排序游戏和卡片分组,主要运用继承多态等知识。可以看到你,本次作业内容是围绕java的正则表达式还有继承和多态等知识。

    一.第一次pta

    接着我将讲一下写代码时遇到的一些主要问题。先从第一次pta作业讲起,第一题的水文校验代码写不出来,就不讲了,第二题是求圆周率,用的是蒙特卡洛方法,因为主函数还有类的设计什么的也都给了,按着给的来补充代码就行,因为代码比较简单,运行两遍就过了,就不多讲了第三提示图形设计类的代码,写起来也比较简单,一遍就过了,因为自己在java软件上测试了几遍,也没遇到什么问题,也不讲了。

    二.第二次pta

    第二次pta作业第一题是图形设计类,由于也给了UML图还有主函数之类的,写起来遇到的大问题也不多,最开始是不知道怎么来存储对象,后来和同学讨论了一下,发现可以用ArrayList<Shape> array  = new ArrayList<Shape>();,这个arraylist来存储类,改过几遍之后,也熟悉了他的一些基本功能,比如关于类的存储之类的问题,又因为是抽象类,所以又和同学讨论了一下,加上网上搜的比较多,终于是把大概写出来了。再就是遇到几个小问题,一直改不出,特别是临界点的问题,比如输入的是0个图形之类的情况,

    写到最后快没时间了,就没写了,这道题就过了,也没什么好讲的,将下一道题吧,第二题是一元多项式求导,关于如何存储输入的数据我一直有问题,比如用的是next还是啥的,我一直有疑问,网上解释的也很简单,不好找,所以我就写了个正则表达式的校验之类的,其他的编译错误,干脆不写了,所以只有一个校验正则表达式的分数

    三.第三次pta

         接着讲第三次pta作业吧,第三次第一题用的是图形卡片类排序,就是按照图形的面积大小进行排序,还是跟上一次作业用到的知识点一样,用的是 ArrayList方法来存储类,然后运用其中java自带的方法调用排序之类的,没太多花里胡哨的算法,代码结构清晰明了,写的有点像c。不过到有一点不同的,那就是老师建议的在main函数下面定义了public static Scanner input = new Scanner(System.in);这样以后就可以再其他类中调用这个输入函数,我也试了一下用以前的方法写代码,还真的有错,

    是第一点只输入0时错误了,现在还不知道为什么,感觉java就是个坑,哪里都可以有问题,后来改了一下,情况好多了

    但最后一个测试点有问题,检查了一下发现是三角形类和梯形类又问题,经过修改之后,终于是写完了,成果就是下面这张图

    第二题是卡片分组类,就是把三角形,正方形之类的图形分下组1,然后分别对组内的图形进行排序之类的问题,代码和第一题差不多,主要是针对第一题进行了分组,然后再排序,修改的是void showResult() 这个方法下面的函数,改为了适合题目的函数,接着又改了一下白天老师讲的如何重构那个排序函数,使得可以根据需要选择从大到小还是从小到大排序

    abstract class Card implements Comparable<Card>{

    public int compareTo(Card card) {

        if(this.getArea()>card.getArea())     return -1;

        else                                  return 1;

    }

    按照题目要求,是从小到大排序,遇到再return那里修改了一下代码,使得可以从小到大排序,第一遍运行答案如下

    可以看到,还是有不少地方有问题,尤其是第一个测试点,前面已经提到java是个坑坑,老师也给出了解决的办法,可是不管用,于是去问了同学,发现是main函数要自己修改一遍,不然过不了,于是我把main函数改为了

    Scanner sc=new Scanner(System.in);

        ArrayList<Integer> list = new ArrayList<Integer>();

        int num = input.nextInt();

        if(num!=0) {

        while(num != 0){

            if(num < 0 || num > 4){

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

                 System.exit(0);

            }

            list.add(num);

            num = input.nextInt();

        }

        DealCardList dealCardList = new DealCardList(list);

        if(!dealCardList.validate()){

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

             System.exit(0);

        }

        dealCardList.showResult();

        }else {

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

            System.exit(0);

    }

    像这样,运行时第一个测试点就过了。不过还要对分好组的图形内部进行排序,本来想把这些图形类给放进一个数组里,再用冒泡排序的算法对其进行排序,可后来java提示不能随类进行排序,于是就只好用java自带的函数进行排序。

    最后一个测试点是求分好组的面积最大的一个组,并输出那个组面积和,我就加了个求面积的函数 double getMax(double a[]) {

            double max = a[0];                   

    for(int x=1;x<a.length;x++)      

    if(a[x]>max)     

    max = a[x];

    return max;

    }

    并调用它来输出面积。最后总算是大功告成了。

    四.总结

    通过本次作业,可以看到,我的代码已经越走越远,可以按照需要自己增加相应的类,而在c'中,想要加代码然而牵一发而动全身的例子不在少数,java就不一样了,可以根据需要自己来增加代码,这也归功于抽象类的设计以及接口

    等知识。至于正则表达式,已经会初步掌握了,。明天就是五一长假了,各位小伙伴好好玩一下,不要累坏了身体

  • 相关阅读:
    ADO.NET 中的数据并发
    net中前台javascript与后台c#函数相互调用
    js正则函数match、exec、test、search、replace、split使用介绍集合
    jQuery遍历Table tr td td中包含标签
    SQL你必须知道的-查询聚合分组排序
    haut-1280 诡异的迷宫
    int、long long等的取值范围
    codeforce 855B
    nyoj-2357
    codeforces 858A
  • 原文地址:https://www.cnblogs.com/kc-mosl/p/12809512.html
Copyright © 2020-2023  润新知