OOP第三次blog(08-11)
前言:除去那些小题,新增的知识点有根据中文进行排序,不熟悉的知识点:Collection类,set,map;题量:除去成绩系列第一题写了三天以外,其他都是一个晚上完成拓展外带对上一次不完备之处的修改
设计与分析:这是最后一次提交时候的类图,没有完全按照题目给的参考类图来写。(以下给出的代码均为最终代码)
其中因为代码容量问题没有满足单一职责原则体现在在sortStudent方法里同时进行了排序和计算学生成绩(只是我这里面的一个例子)。还有除去期末考试最后一题要求的我都没有用private,都是package.原本应该在Studnet类里写上一个更为完备的addStudent,但是因为第一次写没有注意到只写成了以下这个样子:
Student student = new Student();
student.sNb = sNb;
student.name = name ;
return student;
}
原本是应该把这一部分全部写进去的:在进行第二次的时候本来想的是把这个写进去,然后能够减少代码量,最后取消的原因有两个,一是第二次给了30kb,足够我用,二是这个方法在写到一半的时候要的参数太多了,写的很不方便。
if (course.checkcs2(ss[2], cs)) {
if(cs.get(course.x).property.equals("考察")){
ac.add(Class.addClass(ClassName));
ac.get(j).sts.add(student.addStudent(ss[0], ss[1]));
ac.get(j).sts.get(0).cs.add(course.addCourse(ss[2]));
ac.get(j).sts.get(0).all[0] = grade;
cs.get(course.x).addGrade(cs,course,grade,grade);
j++;
continue;
} else {
ac.add(Class.addClass(ClassName));
ac.get(j).sts.add(student.addStudent(ss[0], ss[1]));
ac.get(j).sts.get(0).cs.add(course.addCourse(ss[2]));
ac.get(j).sts.get(0).all[0] = 0;
j++;
System.out.println(ss[0]+" "+ss[1]+" : access mode mismatch");
continue;
}
} else {
System.out.println(ss[2] + " does not exist");
continue;
}
} else {
if (course.checkcs2(ss[2], cs)) {
if(cs.get(course.x).property.equals("考察")){
for (t = 0; t < ac.size(); t++) {
if (ClassName.equals(ac.get(t).number)) {
spe1 = t;
st1 = ac.get(t).number;
l = ac.get(t).sts.size();
for (int p = 0; p < l; p++) {
if (ss[0].equals(ac.get(t).sts.get(p).sNb)) {
spe2 = p;
k = ac.get(t).sts.get(p).cs.size();
st2 = ac.get(t).sts.get(p).sNb;
ac.get(t).sts.get(p).cs.add(course.addCourse(ss[2]));
ac.get(t).sts.get(p).all[k] = grade;
cs.get(course.x).addGrade(cs,course,grade,grade);
break;
}
}
if(!st2.equals(ac.get(t).sts.get(spe2).sNb)) {
k = 1;
ac.get(t).sts.add(student.addStudent(ss[0], ss[1]));
ac.get(t).sts.get(l).cs.add(course.addCourse(ss[2]));
ac.get(t).sts.get(l).all[0] = grade;
cs.get(course.x).addGrade(cs,course,grade,grade);
break;
}
}
}
if (!st1.equals(ac.get(spe1).number)) {
ac.add(Class.addClass(ClassName));
ac.get(j).sts.add(student.addStudent(ss[0], ss[1]));
ac.get(j).sts.get(0).cs.add(course.addCourse(ss[2]));
ac.get(j).sts.get(0).all[0] = grade;
cs.get(course.x).addGrade(cs,course,grade,grade);
j++;
}
continue;
}

还有就是有两次修改的地方一个是原本所有的list我都是用对象数组实现,后来改成的list,这个时候刚写完length == 4,改的话还有时间,等到我完全写完,又想要把list改成map,最后来不及了,到最后一个小时我就直接交了。
其他题目:7-1 统计Java程序中关键词的出现次数
这道题目主要是对
注释中出现的关键字不用统计
字符串中出现的关键字不用统计
这两处进行处理,处理好了就基本上可以提交了,注释有两种 // 和 /* */
要注意的是 “ // ”通常来说放在哪里都可以(句子后或者是单独成段),而/*则一般是单独成一段,所以 /* 要更好处理
if (str.contains("/*")) {
inComment = true;
}
if (str.contains("*/")) {
inComment = false;
但是其实我写的还是有问题,但是测试点好像没有这方面的测试,举个例子:万一我是个新手没有按照通常的标准来写成了 ...... /*
*/的话/*之前的内容也会被忽略。、
处理完这一部分,在处理//的时候才是最麻烦的,一方面是由于 // 的位置可以变化,还有就是 // 可以出现在 “ ”里,要把 “” 和 // 的处理写在一起,代码就只给一部分
if (c == '/') {
if (i + 1 < str.length() && str.charAt(i + 1) == '/') { // 单行注释
break;
} else if (i + 1 < str.length() && str.charAt(i + 1) == '*') { // 多行注释
inComment = true;
i++;
}
都处理完了以后就可以开始进入正式工作了
写完以后,代码刚好五十多行在第一要求里
7-4 jmu-Java-04面向对象进阶-03-接口-自定义接口ArrayIntegerStack
7-5 jmu-Java-03面向对象基础-05-覆盖
这两个题目还有点意思,从另一个视角更具体地看到了平时使用的方法的内部。
踩坑心得:
1.在每次添加元素的时候一定要记得补充是否有首元素的判定。
2.仔细分析要求以及样例,对于这一次的成绩系统(一部分)来说就是所有的wrong format的内容都不要了,但是所有的"does not exist"和": access mode mismatch"即使有问题也要把学生放到班级里,具体题目到时候还是要具体分析。
3.已经写好的代码能够有效的运行就不要再动了在我写的给学生排序时因为对冒泡排序不熟,本来就写的磕磕绊绊,因为我的student里面还有一层,所以要写三层循环,后面改了两次,再怎么改也写不对了,完全放弃,换了一种写法。、
for (int i = 0; i < ac.size(); i++) {
boolean sorted = false;
while (!sorted) {
sorted = true;
for (int k = 0; k < ac.get(i).sts.size() - 1; k++) {
a1 = Integer.parseInt(ac.get(i).sts.get(k).studentNumber);
a2 = Integer.parseInt(ac.get(i).sts.get(k + 1).studentNumber);
if (a2 < a1) {
newStudent = ac.get(i).sts.get(k + 1);
ac.get(i).sts.set(k + 1, ac.get(i).sts.get(k));
ac.get(i).sts.set(k, newStudent);
sorted = false;
}
}
}
}
改进建议:不太了解改进的方向,但是我想是首先要满足七个原则
总结:对本阶段(10-16周),第一次全投入到了写代码中,和之前写菜单不一样,这一次写代码开始主动写,尤其是从第一次成绩系统开始,礼拜一到礼拜三,每天晚上大约11点开始直到晚上2点以后,这段时间里没有人打扰,也不知道怎么回事,不知不觉就写到了这么晚,甚至还有一种想要继续写,直到全部写完的冲动。这一段时间也不知道是不是礼拜六给自己的心理暗示的作用,一直有这样的一个信念“上一次菜单没有时间,这一次三天够我写完了,我一定要拿到100。”,这一段时间也是我第一次体会到专心写代码的快感,这种感觉和写数学题很像,不过现在写数学没有这种感觉了,现在要么是没学会,写不出,要么是一样的题没有味。总之就是没有高中一天5,6个小时写数学的感觉。这一次写成绩系列的感觉甚至还要更好,看着问题一点一点被解决,真的很好,但是只有晚上才有这种感觉,白天没有第一节课时写上两个小时全没有这种感觉,除非室友全都没有起床,这是三天就只有一次他们都九点以后起来。学到了什么?其实我都会,唯一有问题的中文排序,同学给了我代码 Collator collator = Collator.getInstance(Locale.CHINA);自己加点东西就好了。在这个阶段的练习中想法思路往往是正确的,但是在用代码实现的时候总是会缺斤少两,这是以后还要继续练习的地方.
对于BOPPPS里的参与式学习,分组学习javafx,我想聊两句,因为开拜问题,(就我在写这个blog的时候旁边还在说为什么选这个专业其他人都回家了,呵呵)我就是受害者,首先我在分组里我是组长但是,这不是我要求的,是他们三个人一开始就在寝室里讨论,看那个位置轻松,我没有参与他们的讨论,然后这个剩下来的组长就是我来,我本来想着也还好,他们争着要简单的任务也是人之常情,虽然我讨厌被强行选上,还是因为他们自己的小九九。在星期三的时候,我看了一眼PPT已经写的差不多了,到星期四的晚上大概八点钟左右交给了我 (没有记错的话我应该是在提交前2天晚上提醒了他们一下,也不好提醒太多次,本来就不和他们一起玩,我通常都是和其他寝室的人走在一起,提醒多了影响关系),然后那个做案例的是最离谱的,当时我还在写线代网上考试,大概一个小时,到11点20左右把才把案例交给我,我想着赶紧提交材料了,因为那天截止,但是对于案例源码不是要压缩成.rar文件吗,我又在考试我就让他压缩,最让我生气的是他说:“可是我电脑都关机了欸,而且我也不知道怎么压缩”。然后就跑到床上玩手机去了,虽然压缩一下花不了我多少时间,但我就是很不舒服他们的态度,他写的案例也就是把书上的原封不动的抄了一边,在这途中还运行不出来,问我怎么回事。然后到礼拜五,没有第一节课,我看了一下PPT,我们做的事polygon但是PPT做的居然是polyline,而且关于怎么做这个PPT我们还有了讨论,他居然做错了!至于教案我没看,我主要是按照PPT讲。其实PPT也就是他做的特别简单,他当时说polygon和polyline没什么区别,稍微改一改就好了。我还有点庆幸他做的简单不然改都来不及,然后我虽然说不上是个社恐,但上台讲课还是会有点紧张,就直到礼拜四晚上才给自己做好心理建设,而之前他们讲的课其实我都没有怎么听,靠晚上预习。然后我又是一个在团队合作上讲马太效应的人,你们做的越认真,我也认真,反之也一样。最后在这个礼拜五和下个礼拜三段老师说有些组。。。。。。我觉得毫无疑问就是我们组,但是我也不想啊,我们这个组里有两个挂科摆烂的人,在高数期末上还算着分答题,生怕比60多一分自己浪费了一样。对于这个分组任务,就我看来,大部分人都是和自己寝室的一个组,本来我是想找一个以前问过我问题的女生加到我们组里来,但是好家伙我们班女生的全都已经分完了,我希望是能够自己一个人一队,和多人队一样的任务,这个队伍和工作上的团队还是不一样嘛,工作上的会影响工资甚至丢掉工作,要是有人这样我当时就要骂人了,这种团队又不一样,毕竟以后还要住在一起4年,是吧。之前大一上个学期所有的团队任务我都是向老师申请的一个人完成,比如职业生涯规划里的一个访问已经工作的人或者学长,我不仅是一人完成的老师还发消息说做的好,要拿去给下一届当样例,特意在学习通里发消息询问我的意见。总之我还是希望能够有单人队,反正任务也不难,就当成锻炼个人能力也完全没有问题