oop题目集7~11的总结性Blog

一、前言

7-11的训练集训练了对map,hashset等集合和图的用法,同时训练了如何处理大量数据并进行分类整理,训练了ArrayList的排序方式,学会如何使用comparetor辅助排序,训练了自定义接口,和覆盖功能。这次训练集较上次训练集难度稍微降低,更偏向于技巧性的训练,让我们掌握更多知识点

二、设计与分析:

(1)、训练集9

7-1 统计Java程序中关键词的出现次数

编写程序统计一个输入的Java源码中关键字(区分大小写)出现的次数。说明如下:

Java中共有53个关键字(自行百度)
从键盘输入一段源码,统计这段源码中出现的关键字的数量
注释中出现的关键字不用统计
字符串中出现的关键字不用统计
统计出的关键字及数量按照关键字升序进行排序输出
未输入源码则认为输入非法
这道题采用将java中的关键字存入字符串数组中,将获得的代码进行分割处理将标点符号替换成空格,在对空格进行分割后进行比对,再利用map的特性进行关键字的统计,完成java关键字统计过程,但因为思考不全面导致还有部分测试点未过需要加强练习。

(2)、训练集10

7-3 课程成绩统计程序-2

这道提要求我们使用聚合关系实现课程成绩统计程序-2,代码分析如下:
类图设计:
image
由图可知选课为具备成绩,姓名,课程三个信息的具有意义的分数,本题将学生放入班级类内,由mian函数进行数据处理在创建班级学生等对象。
SourceMonitor分析图表:
image
观察SourceMonitor分析图表可知各类的总体复杂度还行在控制范围内,但是main函数复杂度特别高,原因来自于要处理不同数据的情况,感觉没有做到单一职责原则,可以添加数据处理类降低复杂度

点击查看代码
import java.util.Scanner;
import java.util.Arrays;
import java.util.Collections;
import java.util.Comparator;
import java.text.Collator;
import java.util.Locale;
import java.util.Arrays;



public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        Courses courses = new Courses();
        Classes classes = new Classes();
        OptionalCourses optionalCourses = new OptionalCourses();
        boolean[] flag = new boolean[2];
        while (true) {
            String str = in.nextLine();
            String[] str1 = str.split("\\s+");
            if (str1.length == 1)
                break;

            else if (str1.length == 3){
                if(str1[0].length()>10)
                    System.out.println("wrong format");
                else if (str1[1].equals("实验")&&str1[2].equals("实验"))
                    courses.addCourse(new Course(str1[0]));
                else if(str1[1].equals("必修")&&(str1[2].equals("考察")||str1[2].equals("实验"))||(str1[1].equals("选修")&&str1[2].equals("实验")))
                    System.out.println(str1[0]+" : course type & access mode mismatch");
                else courses.addCourse(new Course(str1[0], str1[1], str1[2]));}
            else if (str1.length == 4) {
                Student student = new Student(str1[0], str1[1]);
                if(str1[0].length()!=8||str1[1].length()>10||Integer.parseInt(str1[3])>100||Integer.parseInt(str1[3])<0)
                    System.out.println("wrong format");

               else {if (courses.searchCourses(str1[2])==null)
                    System.out.println(str1[2] + " does not exist");

                else if(!courses.searchCourses(str1[2]).t1) {
                    System.out.println(str1[0] + " " + str1[1] + " : access mode mismatch");
                }
              else{

                    optionalCourses.addOptionalCourse(new OptionalCourse(courses.searchCourses(str1[2]), student, new ExamineScore(Integer.parseInt(str1[3]))));

                }

                 if (classes.SearchClass(str1[0].substring(0, 6)) == null) {
                    Class classs = new Class(str1[0].substring(0, 6));
                    classes.addClass(classs);
                    classs.addStudent(student);
                } else {
                    if(classes.SearchClass(str1[0].substring(0, 6)).searchStudent(student.number)==null)
                        classes.SearchClass(str1[0].substring(0, 6)).addStudent(student);
                }}
            } else if (str1.length == 5) {
                Student student = new Student(str1[0], str1[1]);
                if(str1[0].length()!=8||str1[1].length()>10||Integer.parseInt(str1[3])>100||Integer.parseInt(str1[3])<0||Integer.parseInt(str1[4])>100||Integer.parseInt(str1[4])<0)
                    System.out.println("wrong format");
                else {
                if (courses.searchCourses(str1[2])==null)
                    System.out.println(str1[2] + " does not exist");

                else if(courses.searchCourses(str1[2]).t&&courses.searchCourses(str1[2]).t1)
                    System.out.println(str1[0] + " " + str1[1] + " : access mode mismatch");

               else optionalCourses.addOptionalCourse(new OptionalCourse(courses.searchCourses(str1[2]), student, new TestScore(Integer.parseInt(str1[3]), Integer.parseInt(str1[4]))));
                if (classes.SearchClass(str1[0].substring(0, 6)) == null) {
                    Class classs = new Class(str1[0].substring(0, 6));
                    classes.addClass(classs);
                    classs.addStudent(student);
                } else {
                    if(classes.SearchClass(str1[0].substring(0, 6)).searchStudent(student.number)==null)
                    classes.SearchClass(str1[0].substring(0, 6)).addStudent(student);
                }}
            }
            else if(str1.length>5) {
                try{
                Student student = new Student(str1[0], str1[1]);
                if (str1[0].length() != 8 || str1[1].length() > 10 || isExperimentWrong(Integer.parseInt(str1[3]), str1)[0]||Integer.parseInt(str1[3])<4||Integer.parseInt(str1[3])>9)
                    System.out.println("wrong format");
                else {
                    if (courses.searchCourses(str1[2]) == null)
                        System.out.println(str1[2] + " does not exist");

                    else if (!courses.searchCourses(str1[2]).t2||isExperimentWrong(Integer.parseInt(str1[3]), str1)[1])
                        System.out.println(str1[0] + " " + str1[1] + " : access mode mismatch");

                    else
                        optionalCourses.addOptionalCourse(new OptionalCourse(courses.searchCourses(str1[2]), student, new ExperimentScore(Integer.parseInt(str1[3]), CreatExperimentScores(Integer.parseInt(str1[3]), str1))));
                    if (classes.SearchClass(str1[0].substring(0, 6)) == null) {
                        Class classs = new Class(str1[0].substring(0, 6));
                        classes.addClass(classs);
                        classs.addStudent(student);
                    } else {
                        if (classes.SearchClass(str1[0].substring(0, 6)).searchStudent(student.number) == null)
                            classes.SearchClass(str1[0].substring(0, 6)).addStudent(student);
                    }
                }
            }
                catch (Exception e){
                    System.out.println(str1[0] + " " + str1[1] + " : access mode mismatch");
                }
            }
        }
        classes.sort();
        courses.sort();
        int c = 0;

        while (true) {

            if (classes.classes[c] == null)
                break;
            int s=0;
            while(true)
             if (classes.classes[c].student[s] == null){
                c++;
            break;}
            else {
                if (optionalCourses.SearchOptionalCourseStudentNumber(classes.classes[c].student[s].number) == null) {
                    System.out.println(classes.classes[c].student[s].number + " " + classes.classes[c].student[s].name +  " did not take any exams");
                s++;}

                else {
                    System.out.println(classes.classes[c].student[s].number + " " + classes.classes[c].student[s].name + " " + optionalCourses.getStudentAverageSore(classes.classes[c].student[s].number));
                    s++;
                }

            }
        }
        int i = 0;
        int o = 0;
        while (true) {
            if (courses.courses[i] == null)
                break;
            else if (optionalCourses.SearchOptionalCourseCourseName(courses.courses[i].getCourseName()) == null){
                System.out.println(courses.courses[i].getCourseName() + " has no grades yet");
            i++;}

            else {


                System.out.println(optionalCourses.SearchOptionalCourseCourseName(courses.courses[i].getCourseName())[o].course.getCourseName() + " " + optionalCourses.getNomalCoursesAverageSore(courses.courses[i].getCourseName()) + optionalCourses.getCoursesTestAverageSore(courses.courses[i].getCourseName()) + " " + optionalCourses.getCoursesAverageSore(courses.courses[i].getCourseName()));
                i++;
            }
        }


        int x = 0;

        while (true) {
            if (classes.classes[x] == null)
                break;
            else if (optionalCourses.SearchOptionalCourseClassNumber(classes.classes[x].getClassNumber()) == null){
                System.out.println(classes.classes[x].getClassNumber() + " has no grades yet");
                x++;}
            else {
                System.out.println(classes.classes[x].getClassNumber() + " " +getClassAverageSore(classes,optionalCourses,x));
                x++;
            }
        }


    }
public static int getClassAverageSore(Classes classes,OptionalCourses optionalCourses ,int x){
        int sum=0;
        int i=0;
for(;classes.classes[x].student[i]!=null;i++){
    sum=sum+optionalCourses.getStudentAverageSore(classes.classes[x].student[i].number);
}
return (int)sum/i;

}
public static boolean[] isExperimentWrong(int n,String[] str1){
        boolean[] a = new boolean[2];
     try {
         for (int i = 0; i < n; i++) {
             if (Integer.parseInt(str1[4 + i]) > 100 || Integer.parseInt(str1[4 + i]) < 0) {
                 a[0]=true;
                 a[1]=false;
                 return a;
             }
         }
         a[0]=false;
         a[1]=false;
         return a;
     }
     catch (Exception E){
         a[0]=false;
         a[1]=true;
         return a;
     }
    }
    public static int[] CreatExperimentScores(int n,String[] str1){
        int[] a=new int[9];
        for(int i=0;i<n;i++) {
            a[i]=Integer.parseInt(str1[4+i]);

            }

        return a;
    }
}


class Class implements Comparable<Class>{
    public Student[] student =new Student[30];
    private String ClassNumber;
    private int studentNumber=0;

    public String getClassNumber() {
        return ClassNumber;
    }







    public Class( String classNumber) {
        this.ClassNumber = classNumber;
    }
        public void addStudent(Student student){
            this.student[studentNumber] = student;
            studentNumber++;
        }
        public Student searchStudent (String StudentNumber){
        int i=0;
        while(true){if(student[i] == null)
            return null;
            else  if(student[i].number.equals(StudentNumber))
                return student[i];
            else i++;
        }
        }

    @Override
    public int compareTo(Class o) {
        if(Integer.parseInt(this.ClassNumber)>Integer.parseInt(o.getClassNumber()))
            return 1;
        else if(Integer.parseInt(this.ClassNumber)==Integer.parseInt(o.getClassNumber()))
            return 0;
        else
            return -1;
    }
}


 class Classes {
    public Class[] classes = new Class[30];
    private int classNumber = 0;

    public void addClass(Class classs) {
        classes[classNumber] = classs;
        classNumber++;
    }

    public Class SearchClass(String ClassNumber) {
        int i = 0;
        while (true) {if (classes[i] == null)
            return null;

            else if (classes[i].getClassNumber().equals(ClassNumber))
                return classes[i];
            else i++;

        }
    }

    public void sort() {

        Arrays.sort(classes, (a, b) -> {
            if (a == null && b == null) return 0;
            if (a == null) return 1;
            if (b == null) return -1;
            return a.compareTo(b);
        });
        for (int i = 0; classes[i] != null; i++) {
            Arrays.sort(classes[i].student, (a, b) -> {
                if (a == null && b == null) return 0;
                if (a == null) return 1;
                if (b == null) return -1;
                return a.compareTo(b);
            });
        }


    }
}

 class Course implements Comparable<Course>{
    public boolean t = false;//区别必修和选修
    public boolean t1 = false;//区别考试和考察
    public boolean t2 =false;//判断是否是实验课
    private String courseName;

    public Course() {
    }

    public Course(String courseName) {
        this.courseName = courseName;
        t2 = true;
    }


    public String getCourseName() {
        return courseName;
    }

    public void setCourseName(String courseName) {
        this.courseName = courseName;
    }

    public Course(String courseName, String t, String t1){
        if(t.equals("必修"))
            this.t = false;
        else if(t.equals("选修"))
        this.t = true;
        else {
            System.out.println("wrong format");
            return;
        }
        if(t1.equals("考试"))
            this.t1 = false;
        else if(t1.equals("考察"))
            this.t1=true;
        else{
            System.out.println("wrong format");
            return;
        }
        this.courseName = courseName;
    }

    @Override
    public int compareTo(Course o) {
        Collator collator = Collator.getInstance(Locale.CHINESE);
        return (collator.compare(this.courseName, o.courseName));
    }
    }

 class Courses {
   public Course[] courses = new Course[30];
    private int coursesNumber = 0;
    public void addCourse(Course course) {
        this.courses[coursesNumber] = course;
        coursesNumber++;
    }
    public Course searchCourses(String CoursesName){
        int i=0;
        while (true){
            if(courses[i] == null)
            return null;
            else  if(courses[i].getCourseName().equals(CoursesName))
            return courses[i];

        else i++;

        }
    }



public void sort(){
    Arrays.sort(courses, (a, b) -> {
        if (a == null && b == null) return 0;
        if (a == null) return 1;
        if (b == null) return -1;
        return a.compareTo(b);
    });
}
}
 class ExamineScore extends Score {


    public ExamineScore(int score) {
        super(score);
    }

    @Override
    public int getscore() {
        return score;
    }
}
 class ExperimentScore extends Score {
private int[] scores = new int[12];

    public ExperimentScore(int i,int[] scores){
        super(i);
        this.scores=scores;
    }
    public int getscore() {
        int sum=0;
     for(int i=0;i<score;i++)
         sum=sum+scores[i];
     return (int)(sum/score+0.5);
    }
}
 class OptionalCourse {
    public Score score;
    public Course course;
    public Student student;


    public OptionalCourse() {
    }

    public OptionalCourse(Course course, Student student, Score score) {
        this.course = course;
        this.student = student;
        this.score = score;
    }

    public void setCourse(String courseName, String t, String t1) {
        this.course = new Course(courseName, t, t1);

    }


    public void setScore(int score1, int score) {
        this.score = new TestScore(score1, score);
    }

    public void setScore(int score) {
        this.score = new ExamineScore(score);
    }


}
 class OptionalCourses {
    private OptionalCourse[] optionalCourses = new OptionalCourse[200];
    private int OptionalCourseNumber = 0;

    public void addOptionalCourse(OptionalCourse optionalCourse) {

        this.optionalCourses[OptionalCourseNumber] = optionalCourse;
        OptionalCourseNumber++;}


    public OptionalCourse[] SearchOptionalCourseCourseName(String courseName) {
        int i = 0;
        int o = 0;
        OptionalCourse[] optionalCourses1 = new OptionalCourse[30];
        while (true) {
            if (optionalCourses[i] == null)
                break;
            else if (optionalCourses[i].course.getCourseName().equals(courseName)) {
                optionalCourses1[o] = optionalCourses[i];
                i++;
                o++;
            } else i++;
        }
        if (optionalCourses1[0] == null)
            return null;
        else return optionalCourses1;

    }

    public OptionalCourse[] SearchOptionalCourseStudentNumber(String StudentNumber) {
        int i = 0;
        int o = 0;
        OptionalCourse[] optionalCourses1 = new OptionalCourse[30];
        while (true) {
            if (optionalCourses[i] == null)
                break;
            else if (optionalCourses[i].student.number.equals(StudentNumber)) {
                optionalCourses1[o] = optionalCourses[i];
                i++;
                o++;
            } else i++;
        }
        if (optionalCourses1[0] == null)
            return null;
        else return optionalCourses1;
    }
    public OptionalCourse[] SearchOptionalCourseClassNumber(String ClassNumber) {
        int i = 0;
        int o = 0;
        OptionalCourse[] optionalCourses1 = new OptionalCourse[30];
        while (true) {
            if (optionalCourses[i] == null)
                break;
            else if (optionalCourses[i].student.getClassNumber().equals(ClassNumber)) {
                optionalCourses1[o] = optionalCourses[i];
                i++;
                o++;
            } else i++;
        }
        if (optionalCourses1[0] == null)
            return null;
        else return optionalCourses1;
    }

    public int getCoursesAverageSore(String courseName) {
        int i = 0;
        int sum = 0;
        OptionalCourse[] optionalCourses1 = SearchOptionalCourseCourseName(courseName);
        while (true) {
            if (optionalCourses1[i] == null)
                break;
            else {
                sum = sum + optionalCourses1[i].score.getscore();
                i++;
            }
        }
        return (int) (sum / i);
    }

    public int getStudentAverageSore(String studentNumber) {
        int i = 0;
        int sum = 0;
        OptionalCourse[] optionalCourses1 = SearchOptionalCourseStudentNumber(studentNumber);
        while (true) {
            if (optionalCourses1[i] == null)
                break;
            else {
                sum = sum + optionalCourses1[i].score.getscore();
                i++;
            }
        }
        return (int) (sum / i);
    }

    public String getNomalCoursesAverageSore(String courseName) {
        int i = 0;
        int sum = 0;
        OptionalCourse[] optionalCourses1 = SearchOptionalCourseCourseName(courseName);
        if (!optionalCourses1[i].course.t1) {
            while (true) {
                if (optionalCourses1[i] == null)
                    break;
                else {
                    sum = sum + ((TestScore) optionalCourses1[i].score).score1;
                    i++;
                }
            }
            return Integer.toString((int) (sum / i)) + " ";
        } else return "";
    }

    public int getCoursesTestAverageSore(String courseName) {
        int i = 0;
        int sum = 0;
        OptionalCourse[] optionalCourses1 = SearchOptionalCourseCourseName(courseName);
        while (true) {
            if (optionalCourses1[i] == null)
                break;
            else {
                sum = sum + optionalCourses1[i].score.score;
                i++;
            }
        }
        return (int) (sum / i);
    }
}
 abstract class Score {
    public Score(int score) {
        this.score = score;
    }

    protected int score;
    public abstract int getscore();
}
 class Student implements Comparable<Student> {
    public String number;
    public String name;

    public Student(String number, String name) {
        this.number = number;
        this.name = name;
    }


    public String getClassNumber() {
        return number.substring(0,6);
    }

    public void setNumber(String number) {
        this.number = number;
    }





    @Override
    public int compareTo(Student o) {
        if(Integer.parseInt(this.number)>Integer.parseInt(o.number))
            return 1;
        else if(Integer.parseInt(this.number)>Integer.parseInt(o.number))
            return 0;
        else
            return -1;
    }
}
 class TestScore extends Score {
    public int score1;//平时成绩

    public TestScore(int score1, int score) {
        super(score);
        this.score1 = score1;
    }
    public TestScore(int score) {
        super(score);
    }

    @Override
    public int getscore() {
        return (int)(score1*0.3+score*0.7);
    }
}



三、采坑心得:

1、对题目难度估计错误,导致没由合理的时间完成安排的任务。
2、在写代码前未能合理的思考结构,导致后续写代码的时候经过大量修改才能实现功能。
3、很多知识只是片面的学习,没有系统的学习,导致效率低下。

四、改进建议:

1、提高代码可读性,掌握标准的代码格式。
2、为代码添加更多注释,让他人更容易理解代码。
3、在写代码前先构思好框架,减少代码长度,使代码更加高效解决问题。

五、总结:

1、这次训练集学会了一些java中方便的存储数据的类型,学会了很多java的技术,了解到栈和队的进出形式,意识到在解决一个大问题时应该将问题细化,先做好设计,在慢慢实现具体功能,这样才能效率翻倍。意识到做任何事情都应该用尽全力去做,不能马马虎虎,要敢于挑战困难。意识到自己对事情的时间安排存在很大问题需要改正。但感觉最近的训练集题目比起上次题目集代码行数增加很多,代码难度也大幅增加,还需慢慢适应.

六、课程评价

java课程采用线下和线上一同教学方式,线下课学习java主要的设计技巧,在课后pta练习中和课后视频课中学习方式使得学生进一步学习java课程的语法知识,教师通过课堂实例的讲解加强了学生对于对所学知识的理解和记忆。但若学生课前准备不够充分,容易造成课程困惑等不良现象,边讲边练的教学方法可能对学生的自主学习能力提出较高要求。PTA题目集驱动的教学过程可以帮助学生更好地理解和应用所学知识,培养他们的解决问题的能力。建议:在教学过程中,可以根据学生的不同程度和需求,合理选择和设计PTA题目集,确保题目的难度适宜。同时,可以提供更多的指导和支持,帮助学生更好地理解和应用所学知识。BOPPPS教学模式可能需要较多的时间和资源来准备和实施,可能会增加教师的工作量。建议:在教学过程中,可以提供更详细和明确的BOPPPS教学模式的要求和指导,帮助学生更好地参与到教学中。同时,教师可以合理安排和分配时间和资源,以减轻自身的工作负担。客观评价:OBE理念注重学生的学习结果和实际能力的评估,有助于提高学生的综合能力。建议和意见:在教学过程中,更加注重对学生的能力评估和反馈,帮助学生实现自主学习和能力的提升。

posted @ 2023-06-27 23:12  xzs2004  阅读(17)  评论(0)    收藏  举报