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)以往的作业或简单或复杂,我都能借助互联网或指导书获取可参考的思路,编码过程井井有条。
很少出现完全没有思路的情况。能够顺利完成作业。而近几次作业(9、10、11)难度递增速度超过我的预期,但其含金量同样的高,尽管我没能全部完美完成,但收获颇丰,成就感满满。
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= {
{
"停止","间歇","低速","高速"
},
{
"停止","间歇","低速","高速","超高速"
}
};
第一个数组的第一个下标表示版本,0和1为两个版本,第二个下标为档位对应的速度,
有的档位(如间歇)有多种速度可调,因此有多个速度值,而其他档位(低速、高速、超高速等)则只有一个固定速度
第二个数组存储了不同档位的档位名称信息,第一个下标表示版本,第二个表示档位。
10-统计Java程序中关键字的出现次数:这次作业的问题是如何处理字符串和注释中的关键字,我的处理方法是设置一些布尔变量,
如当检测到"//"时,就暂停关键字的检测,直到进入下一行,而遇到"/*"时,就找"*/",遇到引号时,就找另一个引号。
11-表达式求值:使用字符串储存输入信息,然后删除空格,再开始遍历、入栈、处理、计算。其中一个比较有意思的问题就是对
数字的处理,因为是按字符遍历,所以数字成为了一个个孤立的个体,我需要将连续的数字组成一个多位数。为此,我的方法是在
检测到一个数字的时候建立一个字符串缓冲区,将其放入然后继续检测下一个字符是否为数字字符,如果是就继续放入缓冲区直到
检测到非数字,最后将字符串缓冲区转换成字符串,再将字符串转换成浮点数存入动态链表,完成了对于数字的处理。
3)每次作业花费的时间比例
调试时间与编码时间的比大概为 8:1,这次出现的意外错误远远多于以往,导致频繁删改。
3.课程收获
通过在pta上做题的方式学习让或多或少我体会到了程序员工作的辛苦,但与此同时也更能理解这个职业。
九次作业以来,我从一个只会if-else的c语言菜鸟过渡到了一个能够用栈、链表等工具解决一定问题的java菜鸟。
虽然有些作业我没能满分完成,甚至有些不到60分,但仍然有所收获,
4.对课程的建议
建议继续保持pta的作业量,但稍微降低点难度,或者多给点提示。
浙公网安备 33010602011771号