第三阶段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自然就更难专注了,但这个是可以改进的。量提上去就可以了。正好就是加上讲解课后习题,新题被老师带着走,跟一道题自己写过之后再被老师带着是完全不一样的。毫无疑问,后者让人更加专注,这才是参与式学习。因为用心了。但是整个过程缺乏了一件事情,叫改正。总结,不是改正,我一直都在总结,却从来没有改正过。题目错了就是错了,不会就是不会,一直放在那里。

posted @ 2023-06-27 18:29  wu_亦是  阅读(34)  评论(0)    收藏  举报