第一次作业总结
一.总结
第一次题目集知识点:简单的数据类型,int double char ,及if else 语句的使用,还有就是对于数据的基本处理。题目数量挺多但是难度不大。第二次题目集知识点:对于数组,字符串,和字符串数组的处理,及对年月日的处理,数量不多不少,难度也还一般。第三次题目集知识点是对于类的简单认识,正则表的式,还有字符串与数字的转换,大数处理。题目很少只有三题,但是难度挺大。
二.设计与分析
题目一7-4本题题目很长,是一个交税问题,去年学习C的时候的原题,我认为这题难度很小,主要是对于if else语句的基本应用,和if else语句的嵌套,我认为主要考察的是个人细心能力,一个数字写错了就计算错了,这一题我最后写的,因为这题代码最多。去年写的时候就搞了很久,今年还是一样,个人认为是自己还是不够细心。做题的过程中非常费眼睛,一点一点数数字,很难受啊。
圈复杂程度如下,比较的复杂是一个垃圾代码

题目一7-8这题是一个很搞人心态的题目,刚开始我以为这题很简单不就是怎么区分三角形吗,该怎么写就怎么写,我把等腰直角三角形和直角三角形弄成了一类,心想不就是a^2+b^2=c^2吗?但是题目要求有两个输出,怎末分类哪,后来经过思考等腰直角三角形还有一个条件就是有两个边相等,我只要加上(a==b||b==c||a==c)就行了,心想就这,我要过了,然而当我把全部的代码全部打出来的时候,提交的时候却有两个点答案错误。哎,问题出在了哪里啊,百思不得其解,哎我这小脑瓜你还真没想出来,还真被卡住了,卡了一段时间,最后室友看不下去了问我三角形是不是每个边都是整数,我恍然大悟,都是小数再开平方的话就会有误差,我得精确一下范围,于是乎我在判断等腰直角三角的条件后加上了(a*a+c*c-b*b<=0.001)这样的话就正确了。
圈复杂程度如下

题目二 7-1这一题是第二次习题集的第一题,当我刚打开第一题的时候什么禁止的转换,我一点都不会,上学期计算机导论的时候讲是讲了,但是我不会,一点不会。这才是第二次作业啊,太难了吧。这一题是我最后才写的,不会写怎么办,首先我在网上查找资料,怎么将二进制变成八进制,会了怎么计算后,还得思考怎么将计算,最后我是用for循环从第一个开始一个一个计算的,方法不是最简单的放法,最后还是解决了这道题目。但是我认为这道题我自己写的有BUG我没有判断元素只有0和1,只是判断了是不是有32位数字,我觉得自己是投机取巧,我自己还是得对这道题目重新写一遍
圈复杂程度如下

题目集二7-4本题是求一个日期的下一天刚拿到这一题的时候比第一题的感觉好多了,老师在题目中给了许多方法,而且把每个方法所实现的功能也写出来了,这一题在作的过程中,并没有多大是的难度,我首先就是判断日期是不是合法,比如一月不能超过31天4月不能超过30天,闰年与非闰年2月各是多少天,这个在写的时候得判断的全面一点,不然就会有测试点不过,然后就是计算下一天,这个和上一个一样讨论,主要是每个月最后一天的讨论,闰年与非闰年是二月多少天,除了12月份以外,其他都是days = 1;month = month + 1;而12月份需要的是years = years + 1 month = 1; days = 1;12月份过了就是新的一年了。个人认为这一题不是很难,需要你细心,也需要你仔细思考。
圈复杂程度如下:

题目集二7-5这个题目和7-4有一些相同的地方,也有不相同的地方,这题是计算一个日期n(-10<=n<=10)天后的日期。相同的地方,判断输入日期是否合法与上一题相同,判断是不是闰年也是一样的。不同的地方也是有的,首先这题是计算n天后,刚开始我并没有找到讨论的方向,你要考虑day + n >0 || day + n < 0; 这是一个讨论方向,然后我就卡到这了暂时没有思路。day + n >0且小于当月的最大天数时好计算,直接令day = day + n;直接输出就好了,当n小于0时并且day – n 该月的罪最大的天数时也好计算,只需要用(day = day – n)%30;month = month+1;即可;最难的是day – n <0;这个时候我的思路是讨论,分为三类;前一个月是31天的,前一个月是30天,还有前一个月是2月的时候,用((day-n)+前一个月的天数)% 前一个月的天数(这个我想了好久才想到)
圈复杂程度如下:

题目集三 7-1是创建帐户Account类,刚发题目及的时候,我还没有学到这儿类,对于这个方面还不是很了解,什么都不知道,在别人都拿了好多分的时候自己还是0分,我就开始自己上网课,自己学着方面的内容,当我觉得自己学的差不多的时候,我就开始做这道题了,在处理日期是引用了一个Java中LocalDate类,第一次提交的过程中总有两个点答案错误,反复检查算法并没有错误,最后原来是我存钱和取钱时错误是输出结果相同,写了两个WithDraw Amount Wrong,但是随着我对类的理解,我并没有用构造器,类里面的方法都定义了参数,这样的话定义类就没有什莫意义了,后来又经过自己的改进,完成了自己想要的模样.
圈复杂程度如下: 类图如下

题目集三7-2这一题和7-1差不多,关键是对于有类的理解,第一遍我和上一题一样,虽然写出来了,但是不符合类的功能,和上一题一样在类中又弄方法,也没有构造器,自然也就不能传参数,后来又一遍改了一下,就符合题目要求了。
圈复杂程度如下 类图如下

题目集三 7-3这一题这次作业的压轴题,我没有完全得到分,首先自己在这次作业中只拿了65分及格分,也是因为这一题的原因,自己这一题只得了15分,过了三个点,常数和错误的情况,这一题我刚开始的时候就先学习正则表达式,学了几天感觉自己学的差不多了,我就开始写着题了首先我判断输入的是不是常数,用了一个方法,然后我又判断输入是否合法,即系数和指数不能为零,到这之后我就没有思路了。我就在想怎么讨论,又想到了m.group把每一项分割出来,接着又卡到了这,这个时候正负好的讨论成了一个问题,怎么将每一项在连起来,最后就一直卡在这,加上自己没有花费大量时间思考,到最后都没有写出来这一题,自己的问题,自己要深刻反思,自己为什么没有解决这个问题,同学好多都得了九十多分,自己却得了六十多分,自己为什么不能花费很长时间去思考,去考虑,多想想多尝试,现在我知道自己缺少的是什么了,个人认为自己的问题是自己不能集中注意力去思考问题,自己的学习态度还有待改正,还有待提高,自己必须在假期重新把这道题给做出来,自己必须弄会这一题,必须解决,不然永远都不会,下周还会有这一题,不然自己下次就会分数不及格。
三.采坑心得
题目集一7-8
刚开始并没有区别直角三角形和等腰直角三角形最后在等腰直角三角形中加了 (a==b||b==c||a==c)同时注意判定是c*c+b*b-a*a<=0.001的使用

题目集二7-4
注意每年的最后一天的判断情况

题目集二7-5 注意看题目不要盲目的凭着自己的想法思考

题目集三 7-1注意错误是输出的语句,仔细看清楚题目要求
public void deposit(int b ) {
if(b<=0 ||b>20000) {
System.out.println("WithDraw Amount Wrong");
}
else
balance = balance + b;
}

public void deposit(int b ) {
if(b<=0 ||b>20000) {
System.out.println("Deposit Amount Wrong");
}
else
balance = balance + b;
}

四.改进建议
第二次题目集7-3使用数组标记天数,从而简化了复杂程度,从而减少了if else的使用
从而使题目更加的简单,代码也更加的少,使逻辑更加的简单,思维更加的轻松,我认为自己用数组比用if else更简单。
import java.util.Scanner;
public class Main {
public static boolean isLeapYear(int year) {
boolean p = false;
if (year % 4 == 0 && year % 100 != 0 || year % 400 == 0)
p = true ;
else
p = false;
return p;
}
public static int numOfDays(int year, int month, int day) {
int sum = 0;
int c = 0;
int d = 0;
int []a={31,29,31,30,31,30,31,31,30,31,30,31};//闰年每个月的天数
int []b={31,28,31,30,31,30,31,31,30,31,30,31};//.非闰年时候每个月的天数
for (int i = 1; i < year; i++) {
if (isLeapYear(i))
sum += 366;
else
sum += 365;
}
if (isLeapYear(year))
{
for(int i = 0;i<(month-1);i++)
d+=a[i];
}
else
{
for(int i = 0;i<(month-1);i++)
d+=b[i];
}
c=d+sum+day;
return c;
}
public static String getWhatDay(int days) {
int nm;
nm = days % 7;
if (nm == 1)
return "Monday";
else if (nm == 0)
return "Sunday";
else if (nm == 2)
return "Tuesday";
else if (nm == 3)
return "Wednesday";
else if (nm == 4)
return "Thursday";
else if (nm == 5)
return "Friday";
else
return "Saturday";
}
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
int year = input.nextInt();
int month = input.nextInt();
int day = input.nextInt();
int c ;
if (year < 1820 || year > 2020 || month < 1 || month > 12 ||day>31 || day < 1) {
System.out.println("Wrong Format");
System.exit(0);
}
if ( month == 4 || month == 6 || month == 9 || month == 11) {
if (day > 30) {
System.out.println("Wrong Format");
System.exit(0);
}
}
if (isLeapYear(year) && month == 2 && day > 29) {
System.out.println("Wrong Format");
System.exit(0);
}
if ((!isLeapYear(year)) && month == 2 && day > 28) {
System.out.println("Wrong Format");
System.exit(0);
}
if (isLeapYear(year)) {
System.out.println(year + " " + "is a leap year.");
} else
System.out.println(year + " " + "is not a leap year.");
c = numOfDays(year, month, day);
System.out.println(year + "-" + month + "-" + day + " " + "is" + " " + getWhatDay(c) + ".");
}
}
题目集二 7-1代码补充,加上一个方法判断是否输入合法即是不是每个元素都是被‘0’
和‘1’,
private boolean isTURE(String string) {
boolean flag = false;
for (int i = 0; i < string.length(); i++) {
if (string.charAt(i)=='0'||string.charAt(i)=='1')
{
flag = true;
} else {
flag = false;
return flag;
}
}
return flag;
}
五.总结
(1).知识点总结:首先学习Java已经一个月了,接触到了一门新的语言,已经从什么都不知道,变得对基本语句的理解与认识,学习了变量常量与基本数据类型,运算符表达式语句流程控制,循环结构,选择结构。数组,与字符串数组等等,方法(类似于函数)不过这些东西与c相似,重要的是知道了面向对象的三大特征,封装 继承 多态 学习了类和对象。自己在类和对象上这些新接触的地方需要在下功夫,需要在努力,当然前边的知识也需要在巩固。
(2).意见与建议:对于教师方面,我觉得老师的培养模式挺好,培养我们的自学能力,我觉得这个模式挺好,同时希望老师上课可以多讲一点。
作业方面:个人认为题目难度有点偏大
实验与课上课下没有什么意见,我觉得模式挺好,可以培养我们的自主学习能力。
浙公网安备 33010602011771号