第三阶段pta题目集分析
前言:菜单题目刚过,学生成绩分析题目又来。 和菜单题目类似。这次又涉及到了组合,继承,正则表达式的应用。虽然老师给了一个简单的类图,但是不够完整,仅供参考,类图里只有类的名称和大概的关系。但就菜单题目的比对,类图里缺少了一些对现有类进行操作的类,比如老师给的类图里面有选课这个类,选课里包含了课程还有成绩信息,我倾向它是对输入里面选课信息的存储和处理。但是它只能存储一行信息,还要再加一个类作为处理选课信息的帮手,再给选课类再加一个父类。但这只是我一开始的想法,接下来的在设计分析里。
设计与分析:毫无疑问,一道题目的开始是做好统筹。先想好大概要写什么,也就是说把那设计图做得更加完美。当然,一开始肯定都是不完善的。一些分析在前言里面也说过了。接下来,我要诉说我之后的想法。这也是一个我要在踩坑心得里面写的东西。总之。前言的方法不行,要用另外一种。其实,想要处理选课信息,没必要再弄一个处理处理选课信息的东西。在选课信息里面使用套娃去套选课信息的组的话又会变成递归,造成内存泄漏。最好就是在主类里面,创造一个选课信息类的对象数组。把每一行的选课信息都存进这个数组里面,然后对这个数组进行排序等操作。不过在学生类里面加上成绩等内容,在班级类里面存学生类的对象数组,这样就避免了主方法的代码过长。这个时候,选课类与学生类就不是组合的关系了。班级类成了我之前想要有的处理处理选课信息的类。这样子设计代码也不会过长。对输入的信息处理依旧是每一行每一行来,利用正则表达式判断输入的到底是选课信息还是课程信息。在考试成绩类和考察成绩类里面计算期末成绩(平时成绩)的总分。在班级里面设计排序的方法。
题目如下:
7-1 课程成绩统计程序-1
分数 100
作者 蔡轲
单位 南昌航空大学
某高校课程从性质上分为:必修课、选修课,从考核方式上分为:考试、考察。
考试的总成绩由平时成绩、期末成绩分别乘以权重值得出,比如平时成绩权重0.3,期末成绩权重0.7,总成绩=平时成绩0.3+期末成绩0.7。
考察的总成绩直接等于期末成绩
必修课的考核方式必须为考试,选修课可以选择考试、考察任一考核方式。
1、输入:
包括课程、课程成绩两类信息。
课程信息包括:课程名称、课程性质、考核方式(可选,如果性质是必修课,考核方式可以没有)三个数据项。
课程信息格式:课程名称+英文空格+课程性质+英文空格+考核方式
课程性质输入项:必修、选修
考核方式输入选项:考试、考察
课程成绩信息包括:学号、姓名、课程名称、平时成绩(可选)、期末成绩
课程信息格式:学号+英文空格+姓名+英文空格+课程名称+英文空格+平时成绩+英文空格+期末成绩
以上信息的相关约束:
1)平时成绩和期末成绩的权重默认为0.3、0.7
2)成绩是整数,不包含小数部分,成绩的取值范围是【0,100】
3)学号由8位数字组成
4)姓名不超过10个字符
5)课程名称不超过10个字符
6)不特别输入班级信息,班级号是学号的前6位。
2、输出:
输出包含三个部分,包括学生所有课程总成绩的平均分、单门课程成绩平均分、单门课程总成绩平均分、班级所有课程总成绩平均分。
为避免误差,平均分的计算方法为累加所有符合条件的单个成绩,最后除以总数。
1)学生课程总成绩平均分按学号由低到高排序输出
格式:学号+英文空格+姓名+英文空格+总成绩平均分
如果某个学生没有任何成绩信息,输出:学号+英文空格+姓名+英文空格+"did not take any exams"
2)单门课程成绩平均分分为三个分值:平时成绩平均分(可选)、期末考试平均分、总成绩平均分,按课程名称的字符顺序输出
格式:课程名称+英文空格+平时成绩平均分+英文空格+期末考试平均分+英文空格+总成绩平均分
如果某门课程没有任何成绩信息,输出:课程名称+英文空格+"has no grades yet"
3)班级所有课程总成绩平均分按班级由低到高排序输出
格式:班级号+英文空格+总成绩平均分
如果某个班级没有任何成绩信息,输出:班级名称+英文空格+ "has no grades yet"
异常情况:
1)如果解析某个成绩信息时,课程名称不在已输入的课程列表中,输出:学号+英文空格+姓名+英文空格+":"+课程名称+英文空格+"does not exist"
2)如果解析某个成绩信息时,输入的成绩数量和课程的考核方式不匹配,输出:学号+英文空格+姓名+英文空格+": access mode mismatch"
以上两种情况如果同时出现,按第一种情况输出结果。
3)如果解析某个课程信息时,输入的课程性质和课程的考核方式不匹配,输出:课程名称+" : course type & access mode mismatch"
4)格式错误以及其他信息异常如成绩超出范围等,均按格式错误处理,输出"wrong format"
5)若出现重复的课程/成绩信息,只保留第一个课程信息,忽略后面输入的。
信息约束:
1)成绩平均分只取整数部分,小数部分丢弃
在这里给出一组输入。例如:
java 必修 考试 数据结构 选修 考试 形式与政治 选修 考察 end
输出样例1:
仅有课程。例如:
java has no grades yet 数据结构 has no grades yet 形式与政治 has no grades yet
输入样例2:
单门考试课程 单个学生。例如:
java 必修 考试 20201103 张三 java 20 40 end
输出样例2:
在这里给出相应的输出。例如:
20201103 张三 34 java 20 40 34 202011 34
输入样例3:
单门考察课程 单个学生。例如:
java 选修 考察 20201103 张三 java 40 end
输出样例3:
在这里给出相应的输出。例如:
20201103 张三 40 java 40 40 202011 40
输入样例4:
单门课程,单个学生,课程类型与考核类型不匹配。例如:
形式与政治 必修 考试 数据库 选修 考试 java 选修 考察 数据结构 选修 考察 20201103 李四 数据结构 70 20201103 李四 形式与政治 80 90 20201103 李四 java 60 20201103 李四 数据库 70 78 end
包含了学生的信息以及选课的信息,StudentGrade,CourseGrade,Classroom,中的计算价格都需要用到Choose_Course中的信息
其中计算班级分数的代码如下:
Map<String, Classroom> classrooms = new HashMap<>();
// 遍历Choose_courses,将学生按班级分组,并累计每个班级的总成绩和班级人数
for (Choose_course choose_course : grades.Choose_courses) {
String number = choose_course.number;
String classroomNum = number.substring(0, 6);
Classroom classroom = classrooms.getOrDefault(classroomNum, new Classroom(classroomNum));
classroom.add(choose_course.Full_Grade);
classrooms.put(classroomNum, classroom);
}
// 计算每个班级的平均分,并将平均分存储到班级对象中
List<Classroom> classroomList = new ArrayList<>(classrooms.values());
for (Classroom classroom : classroomList) {
classroom.calculateAverage();
}
// 按平均分排序,
Collections.sort(classroomList, (c1, c2) -> c1.getClassroomNum().compareTo(c2.getClassroomNum()));
for (Classroom classroom : classroomList) {
if(classroom.getAverage()!=0){
System.out.println( classroom.getClassroomNum()+" "+classroom.getAverage());}
if(classroom.getAverage()==0){
System.out.println( classroom.getClassroomNum()+" has no grades yet");
}
}
第2次题目迭代增加了“实验”部分,实验有实验的次数以及成绩,在读取数据时进行了分:
if (parts[0].charAt(0) > 58) {
int Flag = 0;
if(parts[1].equals("实验")&&parts[2].equals("实验")&&parts[0].length()<= 10){
Flag = -2;
String course_Name = parts[0];
String course_Nature = parts[1];
String course_Way = parts[2];
Course course = courses.addCourse(course_Name, course_Nature, course_Way, Flag);
Course course_1 = courses.addCourse1(course_Name, course_Nature, course_Way, Flag);
}
if (parts[0].length() <= 10&&parts[1].equals("选修")&&(parts[2].equals("考试")||parts[2].equals("考察"))) {
Flag = 1;
String course_Name = parts[0];
String course_Nature = parts[1];
String course_Way = parts[2];
Course course = courses.addCourse(course_Name, course_Nature, course_Way, Flag);
Course course_1 = courses.addCourse1(course_Name, course_Nature, course_Way, Flag);
}
if(parts[0].length()<=10&&parts[1].equals("必修")&&parts[2].equals("考试")){
Flag = 1;
String course_Name = parts[0];
String course_Nature = parts[1];
String course_Way = parts[2];
Course course = courses.addCourse(course_Name, course_Nature, course_Way, Flag);
Course course_1 = courses.addCourse1(course_Name, course_Nature, course_Way, Flag);
}
if(!parts[1].equals("实验")){
Flag = -3;
if(parts[2].equals("实验")){
System.out.println(parts[0] + " : course type & access mode mismatch");
String course_Name = parts[0];
String course_Nature = parts[1];
String course_Way = parts[2];
Course course = courses.addCourse(course_Name, course_Nature, course_Way, Flag);
Course course_1 = courses.addCourse1(course_Name, course_Nature, course_Way, Flag);
}
}
if (parts[0].charAt(0) > 58 && parts.length == 3 && parts[1].equals("必修") && parts[2].equals("考察")) {
Flag = -3;
System.out.println(parts[0] + " : course type & access mode mismatch");
// System.out.println(parts[0] + " does not exist");//修改后的值
String course_Name = parts[0];
String course_Nature = parts[1];
String course_Way = parts[2];
Course course = courses.addCourse(course_Name, course_Nature, course_Way, Flag);
Course course_1 = courses.addCourse1(course_Name, course_Nature, course_Way, Flag);
}//不匹配
if(Flag==0){
System.out.println("wrong format");
String course_Name = parts[0];
String course_Nature = parts[1];
String course_Way = parts[2];
Course course = courses.addCourse(course_Name, course_Nature, course_Way, Flag);
Course course_1 = courses.addCourse1(course_Name, course_Nature, course_Way, Flag);
}
}
第三次源码(不完全正确):
1 import java.text.Collator; 2 import java.util.*; 3 public class Main { 4 public static void main(String[] args) { 5 Scanner in = new Scanner(System.in); 6 int findanexit=0; 7 int u; 8 grade gra_gra=new grade(null); 9 String five="^(\\d{8})\\s+([\\u4e00-\\u9fa5a-zA-Z0-9_]{1,10})\\s+([\\u4e00-\\u9fa5a-zA-Z0-9_]{1,10})\\s+([0-9]|[1-9][0-9]|100)\\s+([0-9]|[1-9][0-9]|100)$"; 10 String four="^(\\d{8})\\s+([\\u4e00-\\u9fa5a-zA-Z0-9_]{1,10})\\s+([\\u4e00-\\u9fa5a-zA-Z0-9_]{1,10})\\s+([0-9]|[1-9][0-9]|100)$"; 11 Chosecoure date = new Chosecoure(); 12 int cont = 0; 13 int sin=0; 14 int run; 15 while (in.hasNextLine()) { 16 run=0; 17 String a = in.nextLine().trim(); 18 String[] b = a.split(" "); 19 int length = b.length; 20 int iq = 0; 21 if (a.equals("end")) 22 break; 23 else { 24 if (length == 3) { 25 int su=0; 26 float []s = new float[2]; 27 s[0]=1; 28 Course c = new Course(b[0],b[1],b[2],1,s); 29 IfWeightRight(date, b, iq, su, c); 30 } 31 else if (length == 6) { 32 int su=0; 33 float []s = new float[2]; 34 s[0]=Float.parseFloat(b[4]); 35 s[1]=Float.parseFloat(b[5]); 36 Course c = new Course(b[0], b[1], b[2],2,s); 37 IfWeightRight(date, b, iq, su, c); 38 } 39 else if(length>6&&(b[2].equals("实验")||b[2].equals("考察")||b[2].equals("考试"))) { 40 int su=1; 41 float[] s = new float[length - 4]; 42 for (int i = 0; i < length - 4; i++) { 43 s[i] = Float.parseFloat(b[i+4]); 44 } 45 Course c = new Course(b[0], b[1], b[2], Integer.parseInt(b[3]), s); 46 if (c.Right()) { 47 if (c.IfMatch(su)) 48 if(length - 4 == Integer.parseInt(b[3])){ 49 ifWeightRight(date, b, iq, c); 50 } 51 else if(!c.IfMatch(su)){ 52 System.out.println(b[0]+" : course type & access mode mismatch"); 53 } 54 else { 55 System.out.println(b[0]+" : number of scores does not match"); 56 } 57 58 } 59 else{ 60 System.out.println("wrong format"); 61 } 62 } 63 date.course.forEach(Course::decide_mark); 64 for(Course e: date.course){ 65 if(e.name.equals(b[2])) 66 run=e.mark; 67 } 68 if ((length == 4 || length == 5)&&run!=3) { 69 if (length == 4) { 70 if (!a.matches(four)) { 71 System.out.println("wrong format"); 72 }else{ 73 int []s = new int[9]; 74 s[0]=-1; 75 s[1]=Integer.parseInt(b[3]); 76 Score sco = new Score(b[0], b[1],b[2],s); 77 Student stu = new Student(b[0], b[1]); 78 date.student.add(stu); 79 date.grades.add(new grade(gra_gra.get_gradenumber(b[0]))); 80 for(Course e: date.course) 81 { 82 if (e.name.equals(b[2]) && e.mark == 1) 83 sin = 1; 84 if(e.name.equals(b[2])) 85 { 86 sco.get_weight(e.weight); 87 sco.get_size(e.size); 88 } 89 } 90 if (sco.HaveThisCourse(b[2], date.course) && sco.NumberMatchMode(b[2], date.course)) 91 { 92 if (cont == 0&&sin==1) { 93 sco.dailyScore = 0; 94 sco.decide_course(date.course); 95 date.score.add(sco); 96 sco.dailyScore = -1; 97 cont++; 98 } 99 for (Score e : date.score) { 100 if (!e.number.equals(b[0]) || !e.name.equals(b[1]) || !e.course.name.equals(b[2]) || e.dailyScore != -1 || e.examScore != Integer.parseInt(b[3]) || sin != 1) { 101 sco.dailyScore = 0; 102 sco.decide_course(date.course); 103 date.score.add(sco); 104 findanexit = getFindanexit(findanexit, gra_gra, date, b); 105 } 106 break; 107 } 108 } else println1(date, b, sco); 109 } 110 } 111 if (length == 5) { 112 if (!a.matches(five)) { 113 System.out.println("wrong format"); 114 } 115 else{ 116 u=0; 117 int []s=new int [9]; 118 s[0]= Integer.parseInt(b[3]); 119 s[1]= Integer.parseInt(b[4]); 120 Score sco = new Score(b[0],b[1],b[2],s); 121 Student stu = new Student(b[0], b[1]); 122 date.student.add(stu); 123 date.grades.add(new grade(gra_gra.get_gradenumber(b[0]))); 124 for(Course e: date.course){ 125 if(e.name.equals(b[2])&&e.mark==2) 126 sin=2; 127 if(e.name.equals(b[2])) 128 { 129 sco.get_weight(e.weight); 130 sco.get_size(e.size); 131 } 132 } 133 if (sco.HaveThisCourse(b[2], date.course) && sco.NumberMatchMode(b[2], date.course) && a.matches(five)&&sin==2)//判断数据是否合法 134 { 135 if (cont == 0) { 136 sco.decide_course(date.course); 137 date.score.add(sco); 138 cont++; 139 } 140 for (Score e : date.score) { 141 if (e.number.equals(b[0]) && e.name.equals(b[1]) && e.course.name.equals(b[2]) && e.dailyScore == Integer.parseInt(b[3]) && e.examScore == Integer.parseInt(b[4])) { 142 u=1; 143 } 144 } if(u == 0 && sco.HaveThisCourse(b[2], date.course) && sco.NumberMatchMode(b[2], date.course) && a.matches(five)) { 145 date.score.add(sco); 146 findanexit = getFindanexit(findanexit, gra_gra, date, b); 147 } 148 } else { 149 println1(date, b, sco); 150 } 151 } 152 } 153 } 154 if ((length > 5||run==3)&&!b[2].equals("实验")&&!b[2].equals("考察")&&!b[2].equals("考试")) { 155 int []s = new int[9]; 156 for(int i=0;i<9;i++) 157 s[i]=-1; 158 for(int i=0;i<length-3;i++) 159 { 160 s[i]=Integer. parseInt(b[i+3]); 161 } 162 Student stu = new Student(b[0], b[1]); 163 Score sco = new Score(b[0], b[1], b[2],s); 164 date.student.add(stu); 165 date.grades.add(new grade(gra_gra.get_gradenumber(b[0]))); 166 sco.get_length(length); 167 for(Course e: date.course){ 168 if(e.name.equals(b[2])&&e.mark==3) 169 sin=3; 170 if(e.name.equals(b[2])) 171 { 172 sco.get_weight(e.weight); 173 sco.get_size(e.size); 174 } 175 } 176 if (sco.HaveThisCourse(b[2], date.course) && sco.NumberMatchMode(b[2], date.course) && sco.IfRight()&&sin==3) { 177 sco.decide_course(date.course); 178 date.score.add(sco); 179 findanexit = getFindanexit(findanexit, gra_gra, date, b); 180 cont++; 181 } 182 else if (!sco.HaveThisCourse(b[2], date.course) && !sco.NumberMatchMode(b[2], date.course)&& sco.IfRight()) { 183 System.out.println(b[2] + " does not exist"); 184 } else if (!sco.HaveThisCourse(b[2], date.course)) { 185 System.out.println(b[2] + " does not exist"); 186 } else if (!sco.NumberMatchMode(b[2], date.course)&&sco.IfRight()) { 187 System.out.println(b[0] + " " + b[1] + " : access mode mismatch"); 188 } 189 else if(!sco.IfRight()&&sco.HaveThisCourse(b[2], date.course)) 190 { 191 System.out.println("wrong format"); 192 } 193 } 194 } 195 } 196 for (Student e : date.student) { 197 Student.getStudenttotol(e, date.score); 198 } 199 int flag; 200 int flag1; 201 String num = "000"; 202 Collections.sort(date.student); 203 for (Student q : date.student) { 204 flag = 0; 205 if(!num.equals(q.number)) 206 flag = 1; 207 num = q.number; 208 if(flag == 1) 209 { 210 if (q.JudgeEmpty()) 211 System.out.println(q.number + " " + q.name + " " + (int)q.student_score); 212 else 213 System.out.println(q.number+" "+q.name+" "+"did not take any exams"); 214 } 215 } 216 date.Course_and_Score(); 217 Collections.sort(date.grades); 218 Collections.sort(date.course); 219 date.output(); 220 date.grade_score(date.score); 221 String num1="000"; 222 for(grade e : date.grades){ 223 flag1=0; 224 if(!num1.equals(e.gradenumber)) 225 { 226 flag1=1; 227 num1=e.gradenumber; 228 } 229 if(flag1==1) 230 { 231 if(e.size!=0) 232 System.out.println(e.gradenumber+" "+ e.grade_score); 233 } 234 } 235 } 236 237 public static void println1(Chosecoure date, String[] b, Score sco) { 238 if (!sco.HaveThisCourse(b[2], date.course) && !sco.NumberMatchMode(b[2], date.course)) { 239 System.out.println(b[2] + " does not exist"); 240 } else if (!sco.HaveThisCourse(b[2], date.course)) { 241 System.out.println(b[2] + " does not exist"); 242 } else if (!sco.NumberMatchMode(b[2], date.course)) { 243 System.out.println(b[0] + " " + b[1] + " : access mode mismatch"); 244 } 245 } 246 247 public static int getFindanexit(int findanexit, grade gra_gra, Chosecoure date, String[] b) { 248 for (grade m : date.grades) { 249 if (m.gradenumber.equals(gra_gra.get_gradenumber(b[0]))) { 250 findanexit = 1; 251 break; 252 } else 253 findanexit = 0; 254 } 255 if (findanexit == 0) 256 date.grades.add(new grade(gra_gra.get_gradenumber(b[0]))); 257 return findanexit; 258 } 259 260 public static void ifWeightRight(Chosecoure date, String[] b, int iq, Course c) { 261 if (c.IfWeightEqual1()) { 262 for (Course e : date.course) { 263 if (e.name.equals(b[0])) { 264 iq = 1; 265 break; 266 } else 267 iq = 0; 268 } 269 if (iq == 0) 270 date.course.add(c); 271 } 272 else{ 273 System.out.println(b[0] + " : weight value error"); 274 } 275 } 276 277 public static void IfWeightRight(Chosecoure date, String[] b, int iq, int a, Course c) { 278 if (c.IfMatch(a)) { 279 ifWeightRight(date, b, iq, c); 280 } 281 else { 282 System.out.println(b[0]+" : course type & access mode mismatch"); 283 } 284 } 285 } 286 class Course implements Comparable<Course>{ 287 String name,nature,assessment; 288 int size,course_score=0,course_dailyscore=0,course_finalscore=0,found=0,mark=0; 289 float []weight; 290 float am=0; 291 Course(String name, String nature, String assessment, int size, float[] s) 292 { 293 this.assessment=assessment; 294 this.nature=nature; 295 this.name=name; 296 this.size=size; 297 this.weight=s; 298 } 299 boolean IfMatch(int a) 300 { 301 return nature.equals("必修") && assessment.equals("考试") && a == 0 || nature.equals("实验") && assessment.equals("实验") && a == 1 || nature.equals("选修") && assessment.equals("考试") && a == 0 || nature.equals("选修") && assessment.equals("考察") && a == 0; 302 } 303 public int compareTo(Course o) { 304 305 try { 306 Comparator<Object> compator = Collator.getInstance(Locale.CHINA); 307 if (compator.compare(this.name, o.name) < 0) { 308 return -1; 309 } else if (compator.compare(this.name, o.name) > 0) { 310 return 1; 311 } 312 } catch (Exception ignored) { 313 } 314 return 0; 315 } 316 @Override 317 public String toString() { 318 return name; 319 } 320 void decide_mark(){ 321 if(nature.equals("必修")||assessment.equals("考试")) 322 this.mark=2; 323 if(assessment.equals("考察")) 324 this.mark=1; 325 if(assessment.equals("实验")&&nature.equals("实验")) 326 this.mark=3; 327 } 328 boolean IfWeightEqual1(){ 329 for(int i=0;i<size;i++) 330 { 331 am+=weight[i]; 332 } 333 return Math.abs(am - 1) < 0.0001; 334 } 335 boolean Right(){ 336 return size >= 4 && size <= 9; 337 } 338 } 339 class Score{ 340 String number,name; 341 Course course = new Course(null,null,null,0,null); 342 int dailyScore,examScore,flag=-1,size=0,mark=0,length; 343 int[] Grade; 344 float [] weight=new float[9]; 345 void get_size(int size){ 346 this.size=size; 347 } 348 void get_weight(float[] weight){ 349 this.weight=weight; 350 } 351 void get_length(int length){ 352 this.length=length; 353 } 354 Score(String number, String name , String coursename, int[] grade) 355 { 356 this.number=number; 357 this.course.name=coursename; 358 this.name=name; 359 this.Grade=grade; 360 for(int i=0;i<9;i++) 361 { 362 if(grade[i]==-1) 363 this.Grade[i]=0; 364 } 365 } 366 void decide_course(List<Course> course){ 367 course.forEach((e)->{ 368 if(e.name.equals(this.course.name)) 369 { 370 this.course=e; 371 } 372 }); 373 } 374 boolean IfRight(){ 375 if(size<4||size>9) 376 return false; 377 for(int i=0;i<9;i++) 378 { 379 if(Grade[i]<0||Grade[i]>100) 380 return false; 381 } 382 return true; 383 } 384 int getFinalScore() 385 { 386 float am=0; 387 if(course.assessment.equals("考察")&&course.nature.equals("选修")) 388 return examScore; 389 else if(course.nature.equals("必修")&&!course.assessment.equals("实验")) 390 { 391 return (int)(examScore*weight[0]+dailyScore*weight[1]); 392 } 393 else if(course.assessment.equals("考试")&&course.nature.equals("选修")) 394 { 395 return (int)(examScore*weight[0]+dailyScore*weight[1]); 396 } 397 else if(course.assessment.equals("实验") && course.nature.equals("实验")){ 398 for(int q=0;q<size;q++) 399 { 400 am+=Grade[q]*weight[q]; 401 } 402 return (int)(am); 403 } 404 else 405 return 0; 406 } 407 boolean HaveThisCourse(String name,List<Course> course){ 408 for (Course e : course) { 409 if (name.equals(e.name)) { 410 return true; 411 } 412 } 413 return false; 414 } 415 boolean NumberMatchMode(String name,List<Course> course){ 416 boolean b = true; 417 for (Course e : course) { 418 if(e.name.equals(name)) { 419 b = (!e.assessment.equals("考察") || flag != 1 || mark == 2) && (!e.assessment.equals("考试") || flag != 0 || mark == 1) && (!e.nature.equals("必修") || flag != 0 || mark == 1) && (!e.nature.equals("实验") || length - 3 == size); 420 break; 421 } 422 } 423 return b; 424 } 425 } 426 class Chosecoure { 427 List<Score> score = new ArrayList<>(); 428 List<Course> course = new ArrayList<>(); 429 List<Student> student = new ArrayList<>(); 430 List<grade> grades=new ArrayList<>(); 431 grade gardes=new grade(null); 432 int m = 0; 433 void Course_and_Score() { 434 for (Course f : course) { 435 m = 0; 436 for (Score e : score) { 437 if (e.course.name.equals(f.name)) { 438 f.course_score += e.getFinalScore(); 439 f.course_dailyscore += e.dailyScore; 440 f.course_finalscore += e.examScore; 441 m++; 442 } 443 } 444 if (m != 0) { 445 f.course_score = f.course_score / m; 446 f.course_finalscore = f.course_finalscore / m; 447 f.course_dailyscore = f.course_dailyscore / m; 448 } else { 449 System.out.println(f.name + " has no grades yet"); 450 f.found=1; 451 } 452 } 453 } 454 void grade_score(List<Score> e) 455 { 456 grades.forEach((q)->{ 457 e.forEach((p)->{ 458 if(q.gradenumber.equals(gardes.get_gradenumber(p.number))) 459 { 460 q.grade_score+=p.getFinalScore(); 461 q.size++; 462 } 463 }); 464 if(q.size != 0) 465 q.grade_score/=q.size; 466 if(q.size==0) 467 System.out.println(q.gradenumber+" has no grades yet"); 468 }); 469 } 470 471 void output() { 472 course.forEach((e) -> { 473 { 474 if ((e.assessment.equals("考试") || e.nature.equals("必修"))&&e.found==0) 475 System.out.println(e.name + " " + e.course_dailyscore + " " + e.course_finalscore + " " + e.course_score); 476 if (e.assessment.equals("考察")&&e.found==0) { 477 System.out.println(e.name + " " + e.course_finalscore + " " + e.course_finalscore); 478 } 479 if(e.assessment.equals("实验")&&e.nature.equals("实验")&&e.found==0) 480 { 481 System.out.println(e.name+ " " + e.course_score); 482 } 483 } 484 }); 485 } 486 } 487 class Student implements Comparable<Student>{ 488 String number,name; 489 float student_score = 0; 490 int student_score_size=0; 491 Student(String number,String name) 492 { 493 this.number=number; 494 this.name=name; 495 } 496 boolean JudgeEmpty(){ 497 return student_score_size != 0; 498 } 499 static void getStudenttotol(Student student, List<Score> e){ 500 e.forEach((f)->{ 501 if(f.number.equals(student.number)) 502 { 503 student.student_score +=f.getFinalScore(); 504 student.student_score_size++; 505 } 506 }); 507 if(student.student_score_size != 0) 508 student.student_score = student.student_score / student.student_score_size; 509 } 510 public int compareTo(Student o) { 511 return this.number.compareTo(o.number); 512 } 513 public String toString() { 514 return number; 515 } 516 } 517 class grade implements Comparable<grade>{ 518 String gradenumber; 519 grade(String gradenumber){ 520 this.gradenumber=gradenumber; 521 } 522 int grade_score = 0,size=0; 523 String get_gradenumber(String number){ 524 this.gradenumber=number.substring(0,6); 525 return gradenumber; 526 } 527 public int compareTo(grade o) { 528 return this.gradenumber.compareTo(o.gradenumber); 529 } 530 public String toString() { 531 return gradenumber; 532 } 533 }
踩坑心得:1、在知道题目要求里有对代码长度的限制的时候千万不能在最后一刻才把自己的答案上传进行测评,不然会造成以为自己已经写完了结果却根本没办法把答案上传到情况。结果就是得要重新写过,无论是类的种类还是类的里面的方法和方法的引用全都要重新考虑。这样很锻炼人的心态。根据我的惨痛经历。不能够为课程还有选课类加上他们各自的父类。这样会造成代码长度过长。因为假如我想要引用一个学生的选课信息里面的课程名称。我首先要有一个选课类的父类。在这个负里面。找到那个学生的选课信息,然后再根据这个选课信息找到这个课程,再根据这个课程找到里面的课程名称。光是写着就有一长串了,引用的时候碰上两者对比,比如进行排序的时候,一行代码会非常非常长,超出限制。为了避免这种情况,精简类与类之间的关系必不可少。
总结:学这门课,我有一点迷茫,因为我时常觉得我在自学,如果要用练习检验我课上学到的东西,那么是否也应该告诉我题目的解决方法。 老师课上给我们讲的是例题。我们回去写 PTA 的题目集是作业,诚然,我们就是要根据例题进行学习,然后去写作业,在写作业的期间,老师不应该告诉我们答案,但是当题目集截止日期过了的时候,老师为什么不告诉我们题目的答案?我觉得会影响我们自主思考不是理由,拿高中学数学为例。答案的解法叫做标准答案,但是我们学生总是能给出各种不一样的解法。我们不会因为老师给了我们标准答案,就完全不考虑其他解法。我们只是根据标准答案去感受一道题它基本的答题模板应该是怎样的。只有一道题的答题模板是不够的。因为题目总是多样的,在我们还不熟悉解法的时候,很难把其他的题目都完全的跟例题进行比对,至少对我来说举一反三实在是太难了。在看到学生答题情况很糟糕的时候。不就说明学生对这道题无从下手吗?这时候老师不应该对题目进行一番讲解吗?特别是像我们的p ta题目集,总是进行题目的迭代。然后时间呢,也给的很少,也就是一旦一次题目没有完成后面就很难再进行下去。老师总以为我们不写,但有没有可能只是我们在开发集成环境上不断的去改答案。我个人习惯是答案完全写好以后,再放到p ta上进行测评,如果我写不出来,我是不会放到PTA上的。如果这样,就说我们懒,不学习,老师看问题也太片面了。问题还是在于,老师根本不告诉我们一道难题该怎么去写,我反正是从自己的错题里面找到经验,例题对我来说太没用了。听说别的班会进行答案的讲解,他们老师还会提醒一道题目的难点,这个难点是指数据要用 float 不能用 int 这种,老师期望我们能够在平台上进行讨论,然后发现,但关键是大佬他可不觉得这是问题,而菜鸟却始终不明白问题出在哪,菜鸟也不好意思上去问,大佬也懒得回答。诚然,老师想培养具有团队合作意识,能自主找到问题的理想状态的大学生,但是也请考虑一下,所有人的性格都是不一样的,每个人都变成一种标版是不可能的。强迫我们进行团队合作,这种事情在我们心情愉快且活动不是很紧急的时候才有效果。 像写p ta题目集这样的时间非常短很紧急的时候,没有人有闲心去聊天讨论难道我写不来的时候我不想问一下那些经常拿一百分的人吗?但事实上是他们很忙。忙到他们没有空理我们。 请老师也稍微考虑一下实际情况,我们不可能强迫别人帮我们。学习的过程中,老师才是我们的指导者。老师才有义务为我们提供教育。如果老师都不教的话,又凭什么要求同学教我们呢?物以类聚,人以群分。学习好的跟学习好的才会玩在一起,学习差的跟学习差的抱团。那这样的情况下,学习差的永远都不能够与上层的人接触。对老师来说,这些题目都太简单了,简单到怎么能够区分出学习好跟学习差的呢? 但就结果而言,就是区分出了学习好的跟学习差的。再加上老师又经常性地提醒,威胁我们要查重,发现抄袭,并且抄袭的双方都将会取消考试资格。在这样的情况下,你让大家怎么放下心来互相交流?面对同学的那种遮遮掩掩的态度,我常常就懒得问他们了。反正我学的很痛苦,而且觉得这很不正常。我觉得老师应该是要教我们怎么写题目的。当然,如果老师觉得我在放屁呢,我就在放屁。
大体上,我们的教学是实现了课程的要求的。课程理念,通俗地讲,就是让我们有能力去根据要求写代码。教学方法,边讲边练,老师边想边说边写代码,我们边看边听边想代码,没有问题。线上线下的教学混合没看出来。线下教学,有 ,就是上课,线上教学如果指的是让我们自己做p ta,我觉得不算,这简直就是把题目扔出来,放养我们。P ta题目集应该是很好的,毕竟是我们老师自己写题目,这样让我们上网不能找到答案,在写的过程中,我们一定是努力自己思考的, 绝对有思维的锻炼。题目集还有迭代这样比较具有特色的题目,很像是我们接下来步入社会工作的模式,根据甲方的要求,不断改进自己的程序。具有前瞻锻炼的本质,可以说一切都很好。教学模式的话,我们没有前测,当然我也觉得这没有必要。上一次课堂翻转的时候,我作为写教案的人可以清楚的知道我们有导入这个环节,只是大多数时候都忽略了,作为课堂的主体而已。课程理念里有要有明确的目标。这里跳过不讲。总结就是,我现在正在写的 blog。参与式学习,我觉得如果课堂上老师例题讲解时的思考算是,可以说不足。毕竟上课的时候很难一直做到专注,特别是这学期。我们的课总是排在离散数学之后。离散数学老师要求很严,上课要求我们要一直看着黑板,绝对不能够低头,被他抓到了,就要被他说一通。上课的时候可以说是非常耗精神。第二节课的Java自然就更难专注了,但这个是可以改进的。量提上去就可以了。正好就是加上讲解课后习题,新题被老师带着走,跟一道题自己写过之后再被老师带着是完全不一样的。毫无疑问,后者让人更加专注,这才是参与式学习。因为用心了。但是整个过程缺乏了一件事情,叫改正。总结,不是改正,我一直都在总结,却从来没有改正过。题目错了就是错了,不会就是不会,一直放在那里。

浙公网安备 33010602011771号