对前三次PTA作业的总结

一、前言

通过对前三次PTA作业的总结,其中蕴含着不少知识点。它让真正开始接触Java的我一点一点的渗入其中。其包含的知识点有Java代码的大体结构,例如:

public class Main{

   public static void main(String args[]){

}

}

接下来就是如何输入:

Import java.util.Scanner;

这段代码放在Main之外。

Scanner input=new Scanner(System.in);

输入整数和字符串分别为:

int i=input.nextInt();

String str=input.next();

或 Srting str=input.nextLine();

当然,我还学到了java中if~else语句嵌套使用,虽然C语言中也有,但用法还有有点区别的。此外,还有for循环语句也是其中知识点之一。

接下来就是构造数组:

以整型数组为例:

Int []array=new int[10];

以上创造了长度为10的整型数组。

之后还接触到的知识点有如何保留两位小数:

System.out.println(Sting.format(%.2f,a));(假设a为变量)

然后还学到了给数组中的元素排序的函数。此函数要引入包“import java.util.ArrayList;” 之后使用Arrays.sort(s3);(s3为数组名);

接下来的知识点就是偏向数学的知识点了,有点烧脑。它需要一步一步的嵌套使用if~else,并且逻辑上还不能出现错误,否则全盘重来。

此题就是第一次题目及判断三角形的题目,后面会着重讲解。

之后还学习了二进制与十进制之间的转化。很多同学都使用了相关函数,但是我使用的是别的方法,虽然相对复杂,但我还是理解的。我把字符数字的ASCII码转化成整型数字进行运算。在使用几个循环就输出了答案。

后面的知识点就是创造一个类了,并且在其中包含很多类方法。

最后一个也是最难的知识点就是正则表达式,说实话我到现在还没搞明白。

 

对于本三次作业,题量倒不是很大,但是难度却是有的。像每次作业最后一题,都花费了我大量时间,可能一上午都写不出来,有点头疼。需要不断的摸索,才能勉强靠近输出。

                    二、设计与分析

     PTA第一次作业第一题,第三题,第四题,第六题的思路较为简单,虽然其中代码可能较长,但都是没有什么含金量的题目。接下来我讲讲其余题目。

 

 

 

以上为第一次作业第二题前面的重要的代码,它的意思是随机输入一段字符串,然后从字符串第一个字符算起。后面就是一些简单的if~else判断语句,就不做太多的讲解了。

 

 

 

 

以上为第一次作业第五题的详细代码。可见代码量不大,思路也不算难,唯一需要注意的就是十元,五元,一元,五角,两分,一分等前面数字的运算过程。只要注意这些,此题就很快解决。

 

 

 

 

此题为第一次作业第七题的部分代码,大致内容是帮数组中的元素进行排序,我使用的是选择排序,因为我认为这种排序方法要比冒泡排序简单一些,而且思路清晰明了。排序后后面就是一些输出过程。也比较的简单。

 

 

 

 

此题为第一次作业第八题,我认为它是具有一定难度的。首先它需要你很了解三角形的相关知识,比如“两边之和大于第三边”,“两边之差小于第三边”等等。其次你还要知道判断三角形的顺序。如果你没有按照顺序判断,比如你想判断它是等腰直角三角形,但如果你把先前判断等腰三角形或者直角三角形的代码打在前面,它就直接输出它为等腰三角形或者直角三角形,这样就达不到你的要求。其他情况也类似。所以判断的逻辑顺序很重要。想对简单,但要通过全部的测试点还有有一点难度的。最后,就是精确度的问题。在你判断三角形边长的关系时,不能把条件锁死,要放宽点范围,比如假设a,b,c为三角形三边,判断a+b>c时,可以判断a+b-c>0.000001,这样的话就更精确。当初我也是犯了这个错误思考了很久才改过来的。接下来为此题的报表内容:

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

此题为第二次作业的第一题将二进制与十进制互相转化的题目。难度一般,但代码长度较长。我首先把随机输入的字符串传进字符串数组,然后用for循环依次控制范围把字符数字通过ASCII码转化为整型数字进行运算,最后在输出。

 

接下来为第二次作业第三题,代码长度很长。

 

 

 

本题先把错误情况排除,使用for循环嵌套达到目的。具体算法如下:

先分月份进行讨论:

若为1,3,5,7,8,10,12月,

则若日期小于1或大于31,则输出“Wrong format”;

若为4,6,9,11月,

则若日期小于1或大于30,则输出“Wrong format”;

接下来判断年份是否为闰年。

若为闰年,则若2月日期小于1或大于29,则输出“Wrong format”;

否则若2月日期小于1或大于28,则输出“Wrong format”;

如果输入的是一个有效的输入,则判断该日期距离公年1月1日有多少天,在除7看余数为多少。

 

 


以上代码为实现方法。

之后可以再用个switch~case语句输出就行。

接下来我们就讲解一下第二次作业第四题与第五题。

首先,第四题错误条件判断与第三题一模一样,在此就不做讲解了。

来看看如何判断下一天日期。

那么,我们就必须做好判断跨年,跨月判断的准备了。

先来分析分析跨年:

 

 

 

 

相信大家能看懂,一个if~else语句就搞定了。

接下来跨月也是一样的道理:

 

 

 

最后就是正常日期输入了:

输出输入日期的下一天就好。

当然值得注意的是闰年与二月份的关系,要记得注意判断。

接下来为第四题报表过程:

 

 

 

 

 

 

第五题也是一样的方法。但唯一需要注意的就是第五题能前推也能后推0~10天,遇到这种情况我们也不需要慌张,只需把if里的判断条件放大范围就好。例如:

 

 

 

此为跨年的情况。我们注意到此判断条件与第四题唯一的不同就是修改了范围,其余代码基本一样,包括错误输入代码、跨年跨月代码,以及正常输出代码等等都相同。接下来为第五题报表过程:

 

 

 

 

 

 

接下来我们来分析一下第三次作业的题目

先来看看第一题。

 

 

 

以上为类的创建,其中包含类中的元素、类方法等等。

通过每个类方法对类中元素进行操作,之后直接引用到主函数中,如下:

 

 

 

 

可见这样主函数会显得非常简洁明了,看起来非常舒服。

此题唯一的知识点就是创建一个新类,其余计算都非常简单。

需要注意的是若存款超过20000或者取款大于余额,会输出Wrong;并且存款按0计算。

接下来看第二题:

 

 

 

 

题目要求要用到以上图片的类方法。

则先创建一个类,在在类中写入方法:

 

 

 

set+日期与get+日期的类方法是为了在主函数中给类中元素一个输入来进行接下来类方法的调用与运算。本题算法运算与上述题中算法相似,现在来看看主函数中类方法的调用:

 

 

 

 

现在来看看第三次作业的最后一题

首先它考察的主要是正则表达式,这是主要难点。

正则表达式是通过字符串来匹配具有相同格式的其他字符串,例如:

 

第一个正则表达式是匹配多项式,第二个则匹配多项式中的单项式。

假设定义一字符串为input,匹配它的正则表达式为sburegex,则用法为:

 

开始我没有定义相关的包从而导致错误,其包为:

 

分离单项式后,就要分别提取出每个单项式的系数和指数。因此我分别运用了以下的正则表达式:

 

//提取系数

 

//提取指数

提取系数与指数后在分别存入数组中进行运算:

 

 

 

需要注意的是要转化数组类型进行运算,先转化为String型在化为int型:

 

转化后根据导数的算法把系数与指数进行运算后在存入新的数组中,之后在,matcher1.find(),matcher1.group(),macther1.end()对结果进行循环输出。

存在的问题

当指数与系数为1或-1时,不知道怎么用正则表达式匹配,因此无法将1或-1存入数组,从而导致运算接龙式错误。接下来为此题报表过程:

 

 

 

                            采坑心得

   说到坑的话,估计就第一次作业第八题和第二次作业第三题了。错误点非常细。在每次提交代码的过程中,我的调试调试结果时这样的:

 

 

 

经过我一步一步的细化与调整,终于最终得到了满分。

      有时我也出现过这样的情况:

 

,我发现每次我都会犯下非常小的问题,每调试一次,就解决其中一个问题,经过多次的调试,最终才能正确。就我个人而言,这也是我总结出来的一个方法:在以后写代码调试时,不要以下想着全对,正常情况就是经过反复的调试才能做到全对的结果,因此,在以后写代码的过程中要时不时的进行间断性调试,不要把代码打完在调试,这样可以减少试错的时间,也可以让大脑更清晰自己写的代码。不会让自己不知道错在什么地方。

                     四、改进建议

就我而言,本三次作业大部分题目代码已经很简单,比如给整型数组中的元素进行大小排序、对两个整型数进行加减、还有相关的if~else语句,switch~case语句。需要简化的是定义的变量。有些变量可以多次使用,而我却重新定义了很多没有使用过的变量,完全可以删去。并且在以后写代码时,我可以把需要的变量全部在开头定义好,而不是当需要的时候再去定义,这样显得潦草麻乱。此外,我还要简化主函数。我要多学会定义新的类,把需要的方法全部在类里面定义好,最后直接放入主函数使用,这样会看的很舒服。

                           五、总结

通过对这三次作业的总结,我学会了如何输入数据,如何创建新的数组,如何把字符串存进字符数组,如何调用函数,如何创建新的类,如何在类里面创建方法,如何调用类里面的方法、以及如何保留2位小数输出。

对老师教学的建议:希望老师以后作业最后一题难度可以小一些。补作业时间的间隔大一些,不然把时间全花在java上,其余课程没时间完成作业。

posted @ 2021-04-02 23:06  永恒之夜lalala  阅读(124)  评论(0编辑  收藏  举报