OOP第十二次作业

    0.前言

NCHU_Software_Java_Homework01

检验前一学期的内容并熟悉JAVA语言,主要内容为选择结构、逻辑运算等。在这一部分,JAVA语言的语句与C语言别无二致。只有输入输出时,能明确显示两种语言的不同。

 

NCHU_Software_Java_Homework02

定义方法,解决问题。这一过程与C语言声明函数相同,先明确作用域、返回值类型、方法名、参数类型等,再对方法执行过程进行编程。

 

NCHU_Software_Java_Homework03

用定义类的方式解决问题。区别于面向过程编程,面向对象编程需要在一开始就明确对象的属性与功能,再据此通过定义方法将功能的逐一实现。

NCHU_Software_Java_Homework05

水文数据校验及处理:涉及字符串处理、动态数组、正则表达式等,难度很高。蒙特卡罗方法求圆周率:对理解算法的考验。图形继承:学习“继承”、“多态”的开端。

 

NCHU_Software_Java_Homework06

图形继承与多态:与上次作业第3题类似,但加入了抽象方法的概念。一元多项式求导:这题是对字符串处理、动态数组、正则表达式等知识的综合考验,难度较上次作业第1题略有降低。

 

NCHU_Software_Java_Homework07

图形卡片排序游戏:考察对抽象对象进行排序使用到的比较器及“可比较”接口。图形卡片分组游戏:紧接上一题加入了分组排列的要求,难度不大。求素数:纯粹的算法考验。

 

NCHU_Software_Java_Homework09 雨刷程序功能扩展设计

  作业目标:在给定的汽车手动风挡玻璃雨刷程序的基础上,对程序进行重构(Refactoring),使得程序可以对功能进行扩展。

本次作业的难度适中,主要在于将不同版本的雨刷系统信息以一定的格式储存,再根据这种格式特征使其程序能够兼容符合该格式的不同版本信息。

 

NCHU_Software_Java_Homework10 统计Java程序中关键词的出现次数

  作业目标:编写程序统计一个输入的Java源码中关键字(区分大小写)出现的次数。

本次作业的难度偏高,不仅要统计关键词的个数,还要排除注释、字符串等部分中的关键字。

 

NCHU_Software_Java_Homework11 表达式求值

作业目标:编写程序,从键盘输入一个合法的表达式,对该表达式进行求值并输出。

本次作业的难度较高,用正则表达式来判断需要耗费很多心思,因此我没有使用正则表达式,而是将输入的字符串遍历,逐个字符检测。

 

    1.作业过程总结

0)以往的作业或简单或复杂,我都能借助互联网或指导书获取可参考的思路,编码过程井井有条。

很少出现完全没有思路的情况。能够顺利完成作业。而近几次作业(91011)难度递增速度超过我的预期,但其含金量同样的高,尽管我没能全部完美完成,但收获颇丰,成就感满满。

 

1)近三次作业,我的解题思路

雨刷系统的重构,体现了确定目标格式的重要性,我采用了三维数组储存版本信息,包括档位、速度等,这样每次更新版本只需要加入一个三维数组即可,无需更改源代码。

统计Java程序中关键字的出现次数,不同于以往单纯的搜索,排除注释和字符串等部分中的关键字消耗了我大部分的脑力,占用了我那次作业的大部分时间,尽管最终结果并不尽人意,但我仍然用简单的if-else条件选择实现了对两种注释中出现的关键字进行忽略处理。

表达式求值,这次作业我使用字符串储存输入内容,然后遍历字符串中的每个字符,使用了if-else条件选择对数字字符、运算符字符和括号字符进行分别处理,而运算时用到了栈和动态链表。

 

2)作业过程中遇到的问题及解决方法:

09-雨刷系统的重构:这次作业我遇到的最大问题是怎样储存版本信息,我的解决办法是用整数数组和字符串数组分别储存档位、速度信息和档位名称信息。

具体结构如下

static int[][][] speedList= {

{

{4,6,12},

{30},

{60}

},

{

{4,6,12,15,20},

{30},

{60},

{90}

}

};

static String[][] leverList= {

{

"停止","间歇","低速","高速"

},

{

"停止","间歇","低速","高速","超高速"

}

};

第一个数组的第一个下标表示版本,01为两个版本,第二个下标为档位对应的速度,

有的档位(如间歇)有多种速度可调,因此有多个速度值,而其他档位(低速、高速、超高速等)则只有一个固定速度

第二个数组存储了不同档位的档位名称信息,第一个下标表示版本,第二个表示档位。

 

10-统计Java程序中关键字的出现次数:这次作业的问题是如何处理字符串和注释中的关键字,我的处理方法是设置一些布尔变量,

如当检测到"//"时,就暂停关键字的检测,直到进入下一行,而遇到"/*"时,就找"*/",遇到引号时,就找另一个引号。

 

11-表达式求值:使用字符串储存输入信息,然后删除空格,再开始遍历、入栈、处理、计算。其中一个比较有意思的问题就是对

数字的处理,因为是按字符遍历,所以数字成为了一个个孤立的个体,我需要将连续的数字组成一个多位数。为此,我的方法是在

检测到一个数字的时候建立一个字符串缓冲区,将其放入然后继续检测下一个字符是否为数字字符,如果是就继续放入缓冲区直到

检测到非数字,最后将字符串缓冲区转换成字符串,再将字符串转换成浮点数存入动态链表,完成了对于数字的处理。

 

3)每次作业花费的时间比例

调试时间与编码时间的比大概为 8:1,这次出现的意外错误远远多于以往,导致频繁删改。

 

    3.课程收获

通过在pta上做题的方式学习让或多或少我体会到了程序员工作的辛苦,但与此同时也更能理解这个职业。

九次作业以来,我从一个只会if-elsec语言菜鸟过渡到了一个能够用栈、链表等工具解决一定问题的java菜鸟。

虽然有些作业我没能满分完成,甚至有些不到60分,但仍然有所收获,

 

    4.对课程的建议

建议继续保持pta的作业量,但稍微降低点难度,或者多给点提示。

posted @ 2020-06-10 21:43  fps_AAA  阅读(279)  评论(0)    收藏  举报