OOP三次作业总结

一、前言


第一次作业:

一共有12题,前4题主要考察的是JAVA的基本语法:输入输出、条件选择和循环,要注意的是JAVA中格式化输出和C语言差不多,用的都是printf。

                      5到8题主要考察的是JAVA处理字符串问题,当我们刚接触到JAVA这门语言的时候,首先发现和C很大的不同点是,JAVA有字符串这个类型,而C用的是字符数组存放字符串的,通 过这几道题目的练习我们会发现,JAVA的一些方法对于字符串的处理是很便捷的,而C处理起来会相对的麻烦。

                      第9题则是非常经典的一道题目,有很多种的解法,对于一些题目任何方法都行,但对于一些题目,暴力循环这种事不行的,所以我们要多掌握几种解法。

                      10和11题是对大家题目信息处理有很大要求的,我们需要将题目给的语言转换成计算机语言,例如第11题,用定积分求面积,我一开始用的是矩形的面积,求出来的答案老是和题目答案差一点,很郁闷,后来在仔细的审题中发现,题目要求用梯形的面积。所以审题重要。第10题就不用说了,题目信息量最大的一题,我们首先要把题目信息读懂,然后转换成机器语言,这时候你会发现这道题考察的还是对字符串的处理。

                      第12题考察的也是一个经典的问题,是求两个数的最大公约数,这个问题的解决办法也有很多,最开始的话,我可能会用双层暴力循环求解,但通过对C语言的学习,已经掌握了用辗转相除法求解该问题。

本次题目集的数量用有点多,一开始觉得题目有点难,毕竟是第一次接触JAVA,而且老师一节课没讲就叫我们写,很考验我们自学的能力,等到做后面几次题目集的时候,已经基本熟悉了JAVA的基本语法,回过头来发现这次的题目集难度不是很大,所有当我们开始接触一门新语言的时候,不要被吓倒了,坚持的学下去。

第二次作业:

一共有9道题目,前面7道题目难度和考点和第一次题目集都差不多,例如对数据格式输出的处理,对字符串的处理,选择语句和循环的语句运用,还是为了加强我们JAVA语法的基本功,8、9两题有点难度,主要考察逻辑思维,第8题是求三角形的类型,有很多种情况,每种情况之间都有一点嵌套,所以我们要梳理好我们的逻辑思维,而且这道题目有个大坑,就是浮点数之间的关系运算符不能用等号,因为计算机对浮点数的存储不会那么精确。第9题是本题目集难度最大的一题,是求某天日期的下一天,你要考虑很多的边界因素,例如今年是闰年还是平年?今天是这个月份的最后一天吗?今天是这个年的最后一天吗?这些问题在你设计代码的时候就要想清楚,不然会有很多的测试点过不去,改代码的时候会很头痛。

第三次作业:

一共有4道题目,题目量虽然不多,但是难度很大,但也算正式的接触了JAVA面向对象和类的概念,了解到了JAVA的特性,一切皆对象,前两道题都是叫你创建类,对类进行初始化,然后对类的方法进行传参调用,如果你对对象的语法知识足够扎实的话,这两道题目还是可以拿下的。第3题是题目集二的最后一题的加强版,首先你要创建一个日期类,然后通过对这个类的处理求出下一天的日期,总体逻辑和那题差不多,但是要和类关联起来,还是比较麻烦的。最后一题是这次题目难度最大的一题了,主要是三块问题,求下n天的日期,求前n天的日期,这两块问题解决了一个,另外一个就好解决了,最后一个问题是求两个日期之间的天差。

二、设计与分析

第一次作业7-10

import java.util.Scanner;

public class Main {

public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String gps;
int hh = 0, mm = 0, ss = 0;

while (true) {
gps = sc.nextLine();
if (!gps.equals("END")) {   //判断字符串是否为“End”,如果为"End"的话就输出时间,因为输入数据可能有很多正确的时间,要输出最后一个时间
if (!gps.startsWith("$GPRMC")) {
continue;
}
int count = 0;
int k = 0;
for (k = 7;gps.charAt(k)!=','; k++) {//找到第2个,的位置于判断是不是A字母
;
}
int sum = 0; //任何数异或0都等于本身
int j = 0;
if (gps.charAt(k+1) == 'A') {
for (j = 1; gps.charAt(j) != '*'; j++) {
sum ^= gps.charAt(j);  // 按照题意在*之间的字符都异或
}
}else {
continue;
}

int check = Integer.parseInt(gps.substring(j + 1), 16);
if (check == sum%65536) {
hh = (gps.charAt(7) - '0')*10 + (gps.charAt(8) - '0');
mm = (gps.charAt(9) - '0')*10 + (gps.charAt(10) - '0');
ss = (gps.charAt(11) - '0')*10 + (gps.charAt(12) - '0');
}else {
continue;
}

}else {
hh = (hh + 8) % 24;//可能会超过24个小时所以取余
if (hh < 10) {
System.out.print("0");
}
System.out.print(hh +":"+ mm +":"+ ss);
break;
}
}
}
}

7-8 判断三角形类型 

 

 上图为该题目的代码分析,可以看出在学习初期并未对代码的复杂度做过考虑。

7-3求下一天

 

 

 

 7-4求下n天

 

 

 

 

 

三、踩坑心得

1.字符串的输入

题目集一的7-8这道题,我一开始用的是next()进行字符串的输入,一直有个点没过去,后来将next()换成了nextLine()就通过了该测试点,

nextLine()方法返回的是Enter键之前的所有字符,它是可以得到带空格的字符串的。next()会自动消去有效字符前的空格,只返回输入的字符,不能得到带空格的字符串。

2.判断直角三角形

题目集二的7-8这道题,一开始我对直角三角形的判定是a^2+b^2=c^2,后来发现一直有一个点没有过去,最后将判定改成a^2+b^2-c^2>0.1才通过了所有测试点,因为对于实数不能用等号来简单的判定,因为计算机对于实数的存储是没有那么精确的。

3.数据输出

题目集二好多最后的输出结果都要用(float)进行强转,到现在也不知道为什么。

四、改进建议

在对求素数可以用时间复杂度更低的方法去求,对于日期的处理判断用定义的数组会更加的便捷,我用的switch代码量有点复杂。对于字符串的操作用ArrarList类进行优化。

五、总结

通过对这三次题目集的学习,我开始逐渐的接触并了解到JAVA,学习到了对字符串的处理,类的构造,我对还java的语法与c语言的不同有了更多的了解,比如c语言的指针、地址、数组储存方式与java都不同,在今后的学习中我更应体会其中的不同之处,避免c语言对java学习的影响。在编程过程中遇到困难,要勇于去写代码,勇敢的试错。在今后的学习中更应加强基础知识的学习,吃透书本中的内容及课堂中所学知识。

posted @ 2023-03-25 23:31  s卓靖皓b  阅读(40)  评论(0)    收藏  举报