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,代码分析如下:
类图设计:

由图可知选课为具备成绩,姓名,课程三个信息的具有意义的分数,本题将学生放入班级类内,由mian函数进行数据处理在创建班级学生等对象。
SourceMonitor分析图表:

观察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理念注重学生的学习结果和实际能力的评估,有助于提高学生的综合能力。建议和意见:在教学过程中,更加注重对学生的能力评估和反馈,帮助学生实现自主学习和能力的提升。

浙公网安备 33010602011771号