一、前言

通过对前三次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上,其余课程没时间完成作业。

对前三次PTA作业的总结的更多相关文章

  1. 【作业】HansBug的前三次OO作业分析与小结

    OO课程目前已经进行了三次的作业,容我在本文中做一点微小的工作. 第一次作业 第一次作业由于难度不大,所以笔者程序实际上写的也比较随意一些.(点击就送指导书~) 类图 程序的大致结构如下: 代码分析 ...

  2. 前三次OO作业总结

    一.作业总结 前三次的任务都是表达式求导.这是我在高中就思考过的问题,但是很久都没有付诸实践,直到学习了"类"这个强大的工具.还有正则表达式,如果能适当使用,则不失为一个字符串格式 ...

  3. 前三次OO作业小结

    I used to be enamored of object-oriented programming. I'm now finding myself leaning toward believin ...

  4. 2018-北航-面向对象-前三次OO作业分析与小结

    基于度量的程序结构分析 由于平时使用了NetBrains出品的IDEA作为IDE,在分析程序的时候我使用了IDEA的插件Metrics Reloaded.然而在使用时发现不懂得很多分析项目的含义,因此 ...

  5. C高级第一次PTA作业 要求三

    要求一.要求二 内容链接:http://www.cnblogs.com/X-JY/p/8550457.html 一.PTA作业中的知识点总结 1.6-1 计算两数的和与差(10 分) (1)*在程序中 ...

  6. OO前三次作业总结

    一.第一次作业 1.程序设计分析 ![img](s1.ax1x.com/2018/04/02/CSgoSU.png) 图1 第一次作业类图 ![name](https://images2018.cnb ...

  7. Blog总结(前三次作业总结)

    前三次作业总结 1.前言 (1)第一次题目集共有8道题目,难度较为简单,知识点为JAVA的一些编程基础知识点,如输入输出,选择,循环,一维数组等. (2)第二次题目集共有5道题目,难度较第一次题目集有 ...

  8. OO前三次作业思考(第一次OO——Blog)

    OO前三次作业总结 基于度量分析程序结构 由于三次作业较多,决定分析内容.功能最为复杂的第三次作业. 上图为第三次作业的类图.我使用了一个抽象类Factor,写了五个因子继承Factor,然后又单独开 ...

  9. 2016福州大学软件工程第三次个人作业-K米软件产品评测

    K米软件测评个人作业结果统计如下: 评分标准: 按照栋哥布置的第三次个人作业--K米测评制定评分标准如下: 第一部分:调研.评测 下载并使用,描述最简单直观的个人第一次上手体验. 0.5 按照描述的b ...

  10. CSAPP深入理解计算机系统(第二版)第三章家庭作业答案

    <深入理解计算机系统(第二版)>CSAPP 第三章 家庭作业 这一章介绍了AT&T的汇编指令 比较重要 本人完成了<深入理解计算机系统(第二版)>(以下简称CSAPP) ...

随机推荐

  1. SpringBoot+mybatis的驼峰命名转换不生效

    使用SpringBoote+mybatis在mybatis-config.xml的配置文件内配置的驼峰命名不生效 然后我就将mybatis的配置写在application.yml内,然后就生效了 用注 ...

  2. [代码审计基础 15]phpmcs_v9.6 rce

    PHP:5.4.5 设置调试:https://blog.csdn.net/m0_46641521/article/details/120107786 版本:phpcms_v9.6.0_UTF8 0x0 ...

  3. 如何快速把导出的csv表格数据导入到SqlServer中

    (不要建自增字段,否则会出现第一个字段数据进不去的情况) 1.打开csv表格 2.打开要导入的表,右键编辑前两百行 3.表格中CTRL+C         数据库中CTRL+V      搞定! ** ...

  4. (一)钉钉宜搭低代码应用开发高级认证之远程API调用方法示例

    大家好,我是代号六零一,在此分享近期学习的低代码开发知识~,如有疑问欢迎在评论区下方点评,作者愿与您一道共同探讨: 一.创建数据源 二.请求地址配置 钉钉路径示例:/dingtalk/web/APP_ ...

  5. day09-MyBatis缓存

    MyBatis缓存 mybatis – MyBatis 3 | cache MyBatis 一级缓存全详解(一) MyBatis 内置了一个强大的事务性查询缓存机制,它可以非常方便地配置和定制. 为了 ...

  6. jquery获得标签元素

    一.根据元素name值获取元素 $("元素[name="name的值"]"); 例子:1.$("a[name="apoint"]& ...

  7. left join(二)

    left join 通俗的解释:以左表为主表,返回左表的所有行,如果右表中没有匹配,则依然会有左表的记录,右表字段用null填充.看起来非常好理解,但实际操作的过程中可能会有一些很容易被忽略的点. 一 ...

  8. Vue props配置项(属性)

    功能:让组件接收外部传过来的数据 1.传递数据: <Demo name="XXX"/> 2.接收数据: (1)第一种方式(只接收): props:['name'] (2 ...

  9. 第四周作业-N67044-张铭扬

    1. 自定义写出10个定时任务的示例:比如每周三凌晨三点执行data命令要求尽量的覆盖各种场景 1)每天早上8点对磁盘使用率进行查看,若超出空间的80%,则发邮件报警 [root@centos8 ~] ...

  10. [Unity]自定义地图编辑器(Scene视图下,EditorWindow的简单应用)

    最近的游戏又很多关卡需要配置(XML保存),给策划写了个非常简单的编辑器,记录下+废话下 1:Editor下打开新窗口需要继承EditorWindow,然后使用获取窗口即可,注意放在Editor文件夹 ...