前言:
题目集六涉及的知识点有:1.利用Arrays.sort()方法根据某些标准对对象进行排序。2.异常处理(NumberFormatException)和条件语句来检查不正确的输入格式。3.类和对象:代码中使用了Class、Student和Lesson等类来表示班级、学生和课程。4.数组:代码使用了不同类型的数组,如班级、学生和课程数组,以及用于存储成绩的数组。
【资料图】
题目集七涉及的知识点有:1使用了HashMap来存储学生信息。2.使用了List接口和ArrayList类来对学生信息进行排序,以便按学号进行输出。3.使用了Student类来表示学生信息,具有姓名、年级和学号等属性。4.异常处理(NumberFormatException)和条件语句来检查不正确的输入格式。5.字符串处理将输入信息拆分为相应的字段。
题目集七涉及的知识点有:1.ArrayList对象用于存储学生信息。然后通过循环从标准输入中获取学生的信息并将其添加到ArrayList中。2.使用Collections.sort方法对ArrayList进行排序,通过Comparator接口实现了学生信息的排序规则,首先按照总分降序排列,如果总分相等则按照输入顺序排序。3.自定义接口ArrayIntegerStack的使用。
设计与分析:
第六次题目集
课程成绩统计程序-1
分析
Main
类是程序的入口点,其中包含了main
方法。它从用户那里读取输入,处理输入数据,并对学生和课程对象执行各种操作。
Class
类表示一个班级或课程,包含了ClassID
等属性以及一个Student
对象数组。它还有一些方法用于添加学生、按照ID查找学生和计算班级中所有学生的平均分数。
Student
类表示一个学生,包含了Name
、ID
等属性以及用于存储学生最终成绩和课程的数组。它还有一些方法用于添加课程和更新每个课程的成绩。
Lesson
类表示一个课程或科目,包含了Name
、Required
和Test
等属性(表示是否必修课和测试类型)。它还有一些方法用于添加测试成绩和持续时间成绩。
FinalPrint
方法输出最终结果,包括学生的平均分数、课程信息和班级的平均分数。
import java.util.Arrays;import java.util.Comparator;import java.util.Objects;import java.util.Scanner;public class Main { private static Class[] Classes = new Class[100]; static Lesson[] lessons = new Lesson[100]; static int SizeOfClass = 0; static int SizeOfLesson = 0; public static void main(String[] args) { Scanner input = new Scanner(System.in); String[] ins; while (true) { ins = input.nextLine().split(" "); if (ins[0].equals("end")) { break; } try { int temp = Integer.parseInt(ins[0]); } catch (NumberFormatException e) { if (CheckLessonFormat(ins)) { System.out.println("wrong format"); continue; } if (Objects.equals(ins[1], "必修")) { if (Objects.equals(ins[2], "考察")) { System.out.println(ins[0] + " : course type & access mode mismatch"); continue; } else if (FindLesson(ins[0]) != -1) continue; else lessons[SizeOfLesson] = new Lesson(ins[0], 1, 1); } else { if (FindLesson(ins[0]) != -1) { continue; } if (ins[2].equals("考试")) { lessons[SizeOfLesson] = new Lesson(ins[0], 2, 1); } else { lessons[SizeOfLesson] = new Lesson(ins[0], 2, 2); } } SizeOfLesson++; continue; } if (!CheckStuFormat(ins)) { if (ins[3].length() > 2) { System.out.println("wrong format"); continue; } String ClassID = ins[0].substring(0, 6); int ClassNum = GetClass(ClassID); int flag = 0; for (int t = 0; t < SizeOfClass; t++) if (getClasses()[t].FindStudent(ins[0]) != null) { flag = 1; } if (flag == 0) { getClasses()[ClassNum].AddStudent(ins[0], ins[1]); } if (FindLesson(ins[2]) == -1) { System.out.println(ins[2] + " does not exist"); continue; } Lesson temp = lessons[FindLesson(ins[2])]; if (temp.Test != 2 || ins.length != 5) { if (temp.Test != 1 || ins.length != 4) { try { if (temp.Test == 1) getClasses()[ClassNum].students[getClasses()[ClassNum].SizeOfStu - 1].AddLesson(temp, Integer.parseInt(ins[3]), Integer.parseInt(ins[4])); else getClasses()[ClassNum].students[getClasses()[ClassNum].SizeOfStu - 1].AddLesson(temp, Integer.parseInt(ins[3])); } catch (NumberFormatException e) { System.out.printf("%s %s : access mode mismatch\n", ins[0], ins[1]); } } else { System.out.printf("%s %s : access mode mismatch\n", ins[0], ins[1]); } } else { System.out.printf("%s %s : access mode mismatch\n", ins[0], ins[1]); } } else { System.out.println("wrong format"); } } FinalPrint(); } static int GetClass(String ID) { for (int t = 0; t < SizeOfClass; t++) { if (getClasses()[t].ClassID.equals(ID)) { return t; } } getClasses()[SizeOfClass] = new Class(ID); SizeOfClass++; return SizeOfClass - 1; } static void FinalPrint() { int SumStudent = 0; for (int t = 0; t < SizeOfClass; t++) SumStudent += getClasses()[t].SizeOfStu; if (SumStudent != 0) { Student[] studentsAverage = new Student[100]; int Size = 0; for (int t = 0; t < SizeOfClass; t++) { for (int t1 = 0; t1 < getClasses()[t].SizeOfStu; t1++) { studentsAverage[Size] = getClasses()[t].students[t1]; Size++; } } Student[] student = new Student[Size]; System.arraycopy(studentsAverage, 0, student, 0, Size); if (SumStudent > 1) { Arrays.sort(student, Comparator.comparing(o -> o.ID)); for (int t = 0; t < SumStudent; t++) { if (student[t].SizeOfFinalScores == 0) { System.out.printf("%s %s did not take any exams\n", student[t].ID, student[t].Name); } else System.out.printf("%s %s %d\n", student[t].ID, student[t].Name, GetAverage(student[t].FinalScore)); } } else { for (int t = 0; t < SumStudent; t++) { if (student[t].SizeOfFinalScores == 0) { System.out.printf("%s %s did not take any exams\n", student[t].ID, student[t].Name); } else System.out.printf("%s %s %d\n", student[t].ID, student[t].Name, GetAverage(student[t].FinalScore)); } } } Lesson[] lesson = new Lesson[SizeOfLesson]; System.arraycopy(lessons, 0, lesson, 0, SizeOfLesson); lessons = lesson; Arrays.sort(lessons, Comparator.comparing(o -> o.Name)); if (SizeOfLesson != 0) for (int t = 0; t < SizeOfLesson; t++) { if (lessons[t].SizeOfScores == 0) { System.out.println(lessons[t].Name + " has no grades yet"); } else if (lessons[t].Test == 1) { System.out.printf("%s %d %d %d\n", lessons[t].Name, Main.GetAverage(lessons[t].DurScores), Main.GetAverage(lessons[t].TestScores), Main.GetAverage(lessons[t].FinalScores)); } else { System.out.printf("%s %d %d\n", lessons[t].Name, Main.GetAverage(lessons[t].TestScores), Main.GetAverage(lessons[t].FinalScores)); } } Class[] classes = new Class[SizeOfClass]; System.arraycopy(getClasses(), 0, classes, 0, SizeOfClass); setClasses(classes); Arrays.sort(getClasses(), Comparator.comparing(o -> o.ClassID)); int i; for (i = 0; i < SizeOfClass; i++) { if (getClasses()[i].GetAverageScore() != 0) { System.out.println(getClasses()[i].ClassID + " " + getClasses()[i].GetAverageScore()); } else { System.out.println(getClasses()[i].ClassID + " has no grades yet"); } } } static int GetAverage(int[] input) { double Ave = 0; int n = 0; for (int i : input) { if (i == 0) break; Ave += i; n++; } Ave /= n; return (int) Ave; } static boolean CheckStuFormat(String[] ins) { if (ins[0].length() != 8) return true; if (ins[1].length() > 10) return true; if (ins.length > 5) return true; if (ins.length < 4) return true; return false; } static boolean CheckLessonFormat(String[] ins) { if (ins[0].length() > 10) return true; if (ins.length != 3) return true; return false; } static int FindLesson(String Name) { for (int t = 0; t < SizeOfLesson; t++) { if (lessons[t] == null) { return t; } else if (lessons[t].Name.equals(Name)) { return t; } } return -1; } public static Class[] getClasses() { return Classes; } public static void setClasses(Class[] classes) { Classes = classes; }}class Class { String ClassID; Student[] students = new Student[100]; int SizeOfStu = 0; Class(String ID) { this.ClassID = ID; } void AddStudent(String ID, String Name) { students[SizeOfStu] = new Student(Name, ID); SizeOfStu++; } Student FindStudent(String ID) { for (int t = 0; t < SizeOfStu; t++) { if (students[t].ID.equals(ID)) { return students[t]; } } return null; } int GetAverageScore() { int Ave = 0; for (int t = 0; t < SizeOfStu; t++) { Ave += Main.GetAverage(students[t].FinalScore); } return Ave / SizeOfStu; }}class Student { String Name; String ID; int[] FinalScore = new int[100]; Lesson[] lessons = new Lesson[100]; int SizeOfFinalScores = 0; int SizeOfLesson = 0; private Lesson lesson; Student(String Name, String ID) { this.ID = ID; this.Name = Name; } void AddLesson(Lesson lesson, int DurGrade, int TestGrade) { this.lessons[SizeOfLesson] = lesson; this.lessons[SizeOfLesson].DurGrade = DurGrade; this.lessons[SizeOfLesson].TestGrade = TestGrade; this.lessons[SizeOfLesson].FinalGrade = (int) (DurGrade * 0.3 + TestGrade * 0.7); FinalScore[SizeOfFinalScores] = this.lessons[SizeOfLesson].FinalGrade; Main.lessons[Main.FindLesson(lesson.Name)].AddScore(DurGrade, TestGrade); SizeOfLesson++; SizeOfFinalScores++; } void AddLesson(Lesson lesson, int TestGrade) { this.lesson = lesson; this.lessons[SizeOfLesson] = lesson; this.lessons[SizeOfLesson].TestGrade = TestGrade; this.lessons[SizeOfLesson].FinalGrade = TestGrade; Main.lessons[Main.FindLesson(lesson.Name)].AddScore(TestGrade); FinalScore[SizeOfFinalScores] = this.lessons[SizeOfLesson].FinalGrade; SizeOfLesson++; SizeOfFinalScores++; }}class Lesson { int TestGrade; int DurGrade; int[] TestScores = new int[100]; int[] DurScores = new int[100]; int FinalGrade; int[] FinalScores = new int[100]; int SizeOfScores = 0; String Name; int Required; int Test; Lesson(String Name, int Required, int Test) { this.Name = Name; this.Required = Required; this.Test = Test; } void AddScore(int DurScore, int TestScore) { this.TestScores[SizeOfScores] = TestScore; this.DurScores[SizeOfScores] = DurScore; this.FinalScores[SizeOfScores] = (int) (0.3 * DurScore + 0.7 * TestScore); SizeOfScores++; } void AddScore(int TestScore) { this.TestScores[SizeOfScores] = TestScore; this.FinalScores[SizeOfScores] = TestScore; SizeOfScores++; }}
第七次题目
容器-HashMap-检索
import java.util.*;import static java.lang.Integer.*;class Student { private final String name; private final int grade; private final String id; public Student(String name, int grade, String id) { this.name = name; this.grade = grade; this.id=id; } public String getId() { return id; } public String getName() { return name; } public int getGrade() { return grade; }}public class Main { public static void main(String[] args) { Scanner input = new Scanner(System.in); HashMapstudents = new HashMap<>(); while (true) { String a = input.nextLine(); if (a.equals("end")) { break; } String[] parts = a.split(" "); String id = parts[0]; String name = parts[1]; int grade = parseInt(parts[2]); Student student = new Student(name, grade,id); students.put(id, student); } String ids = input.nextLine(); Student student = students.get(ids); if (student != null) { System.out.println(student.getId() + " " + student.getName() + " " + student.getGrade()); } else { System.out.println("The student " + ids + " does not exist"); } }}
容器-HashMap-排序
import java.util.*;import static java.lang.Integer.*;class Student { private final String name; private final int grade; private final String id; public Student(String name, int grade, String id) { this.name = name; this.grade = grade; this.id=id; } public String getId() { return id; } public String getName() { return name; } public int getGrade() { return grade; }}public class Main { public static void main(String[] args) { Scanner input = new Scanner(System.in); HashMapstudents = new HashMap<>(); while (true) { String a = input.nextLine(); if (a.equals("end")) { break; } String[] parts = a.split(" "); String id = parts[0]; String name = parts[1]; int grade = parseInt(parts[2]); Student student = new Student(name, grade,id); students.put(id, student); } List > studentList; studentList = new ArrayList<>(students.entrySet()); for (int i = 0; i < studentList.size() - 1; i++) { for (int j = 0; j < studentList.size() - i - 1; j++) { Map.Entry s1 = studentList.get(j); Map.Entry s2 = studentList.get(j + 1); if (s1.getKey().compareTo(s2.getKey()) < 0) { Collections.swap(studentList, j, j + 1); } } } // 输出每个学生的信息 for (Map.Entry entry : studentList) { Student student = entry.getValue(); String id = student.getId(); String name = student.getName(); int grade = student.getGrade(); System.out.println(id + " " + name + " " + grade); } }}
课程成绩统计程序-2
import java.text.Collator;import java.util.ArrayList;import java.util.Comparator;import java.util.Scanner;public class Main { static boolean isNumber(String isNumber){ try{ int a=Integer.parseInt(isNumber); } catch (NumberFormatException e) { return false; } return true; } public static void main(String[] args) { Scanner input=new Scanner(System.in); String str; studentList students=new studentList(); InputMatching matching=new InputMatching(); chooseCourseList choose=new chooseCourseList(); Cls cls=new Cls(); courseList course=new courseList(); String str1,str2,str3; while(true){ str=input.nextLine(); if(isNumber(str.split(" ")[0]))break; if(str.equals("end"))break; if(InputMatching.matchingInput(str) != 1){ System.out.println("wrong format"); continue; } str1=str.split(" ")[0]; if(course.searchCourse(str1))continue; str2=str.split(" ")[1]; str3=str.split(" ")[2]; if((str2.equals("必修")&&str3.equals("考察"))||(str2.equals("实验")&&!str3.equals("实验")||(!str2.equals("实验")&&str3.equals("实验")))){ System.out.println(str.split(" ")[0]+" : course type & access mode mismatch"); continue; } if(course.searchCourse(str1))continue; course.courses.add(course.addCourse(str1,str2,str3)); } String number,name,subject; int UsualGrades,FinalGrades; boolean flag=false; while(!str.equals("end")){ if(flag)str=input.nextLine(); flag=true; if(str.equals("end"))break; String ssr=str.split(" ")[0]+" "+str.split(" ")[1]+" "+str.split(" ")[2]+" "+str.split(" ")[3]; if (InputMatching.matchingInput(ssr) != 2&&InputMatching.matchingInput(ssr) != 3&&course.searchQuality(str.split(" ")[2])!=2) { System.out.println("wrong format");// 字符串符合成绩信息模式 continue; } if(((Integer.parseInt(str.split(" ")[3]))<4||(Integer.parseInt(str.split(" ")[3]))>9)&&str.split(" ").length>5){ System.out.println("wrong format"); continue; } number=str.split(" ")[0]; String Class = number.substring(0, 6); if (!cls.searchCls(Class)) cls.cls.add(cls.addCls(Class)); name=str.split(" ")[1]; students.stu.add(students.addStudent(number,name)); subject=str.split(" ")[2]; try { if (course.searchQuality(subject) == 1) { UsualGrades = Integer.parseInt(str.split(" ")[3]); if (choose.searchCourse(subject) && choose.searchId(number)) continue; FinalGrades = Integer.parseInt(str.split(" ")[4]); students.students.add(students.addStudentCompulsory(number, name, subject, UsualGrades, FinalGrades)); } else if (course.searchQuality(subject) == 0) { UsualGrades = Integer.parseInt(str.split(" ")[3]); if (choose.searchCourse(subject) && choose.searchId(number)) continue; if (str.split(" ").length > 4) { System.out.println(number + " " + name + " : access mode mismatch"); continue; } students.students.add(students.addStudentTake(number, name, subject, UsualGrades)); } else if (course.searchQuality(subject) == -1) { System.out.println(subject + " does not exist"); } else if (course.searchQuality(subject) == 2) { int testNumber = Integer.parseInt(str.split(" ")[3]); if (str.split(" ").length - 4 != testNumber) { System.out.println(number + " " + name + " : access mode mismatch"); continue; } int sum = 0; for (int i = 0; i < testNumber; i++) { sum += Integer.parseInt(str.split(" ")[4 + i]); } sum /= testNumber; students.students.add(students.addExperimentalGrades(number, name, subject, sum)); } } catch (ArrayIndexOutOfBoundsException e) { System.out.println(number + " " + name + " : access mode mismatch"); } } chooseCourseList chooses=new chooseCourseList(); chooses.getAverageGrade(students,course,cls); }}class student{ int experimentalGrades; String number; String name; String course; int UsualGrades=0; int FinalGrades=0; String Class; int grade=0; public static ComparatorgetNumberComparator() { return Comparator.comparing(s -> s.number); }}class course{ String name; String quality; String manner; public static Comparator getChineseNameComparator() { final Collator collator = Collator.getInstance(java.util.Locale.CHINA); // 获取中文排序规则 return (c1, c2) -> collator.compare(c1.name, c2.name); }}class courseList{ ArrayList courses=new ArrayList<>(); boolean searchCourse(String CourseName){ for (course cours : courses) if (cours.name.equals(CourseName)) return true; return false; } course addCourse( String name,String quality,String manner){ course newCourse=new course(); newCourse.name=name; newCourse.quality=quality; newCourse.manner=manner; return newCourse; } int searchQuality(String subject){ for (course course : courses) { if (course.name.equals(subject) && course.quality.equals("必修")) return 1; else if (course.name.equals(subject) && course.manner.equals("考试")) return 1; else if (course.name.equals(subject)&&course.quality.equals("实验"))return 2; else if (course.name.equals(subject)&&course.manner.equals("实验"))return 2; else if (course.name.equals(subject)) return 0; } return -1; }}class studentList { ArrayList students = new ArrayList<>(); ArrayList stu = new ArrayList<>(); student addStudentCompulsory(String number, String name, String course, int UsualGrades, int FinalGrades) { student newStudent = new student(); chooseCourseList newChoose = new chooseCourseList(); newStudent.name = name; if(chooseCourseList.searchCourse(course)&& chooseCourseList.chooseCourse.get(chooseCourseList.searchCourseInt(course)).name.equals(name)&& chooseCourseList.chooseCourse.get(chooseCourseList.searchCourseInt(course)).number.equals(number)) return null; Cls newCls = new Cls(); newStudent.number = number; newStudent.course = course; newStudent.grade = (int) (FinalGrades * 0.7 + UsualGrades * 0.3); String Class = number.substring(0, 6); if (!newCls.searchCls(Class)) newCls.cls.add(newCls.addCls(Class)); chooseCourseList.chooseCourse.add(newChoose.addChoose(number, name, course, Class, UsualGrades, FinalGrades, newStudent.grade)); return newStudent; } student addStudentTake(String number, String name, String course, int UsualGrades) { student newStudent = new student(); newStudent.name = name; newStudent.number = number; newStudent.course = course; newStudent.grade = UsualGrades; String Class=number.substring(0,6); chooseCourseList newChoose = new chooseCourseList(); if(chooseCourseList.searchCourse(course)&& chooseCourseList.chooseCourse.get(chooseCourseList.searchCourseInt(course)).name.equals(name)&& chooseCourseList.chooseCourse.get(chooseCourseList.searchCourseInt(course)).number.equals(number)) return null; chooseCourseList.chooseCourse.add(newChoose.addChooseTake(number, name, course, Class, UsualGrades, newStudent.grade)); return newStudent; } student addExperimentalGrades(String number, String name, String course, int experimentalGrades) { student newStudent = new student(); newStudent.name = name; newStudent.number = number; newStudent.course = course; newStudent.experimentalGrades = experimentalGrades; newStudent.grade = experimentalGrades; String Class=number.substring(0,6); chooseCourseList newChoose = new chooseCourseList(); if(chooseCourseList.searchCourse(course)&& chooseCourseList.chooseCourse.get(chooseCourseList.searchCourseInt(course)).name.equals(name)&& chooseCourseList.chooseCourse.get(chooseCourseList.searchCourseInt(course)).number.equals(number)) return null; chooseCourseList.chooseCourse.add(newChoose.addChooseExperimental(number, name, course, Class, experimentalGrades,newStudent.grade)); return newStudent; } student addStudent(String id, String name) { student newStudent = new student(); newStudent.number = id; newStudent.name = name; return newStudent; } boolean searchStudent(String name) { for (student student : students) { if (student.name.equals(name)) return true; } return false; }}class Cls { private static int nextIndex = 0; String id; private int index; ArrayList cls = new ArrayList<>(); public Cls addCls(String cl) { Cls newCls = new Cls(); newCls.id = cl; // 新增元素的 index 应该为当前列表长度 newCls.index = nextIndex++; cls.add(newCls); return newCls; } public boolean searchCls(String id) { for (int i = 0; i < cls.size(); i++) { if (cls.get(i).id.equals(id)) { return true; } } return false; } public static Comparator getIndexComparator() { return new Comparator () { @Override public int compare(Cls c1, Cls c2) { return c1.id.compareTo(c2.id); } }; }}class InputMatching { static String stuNumMatching = "[0-9]{8}";//8个0-9的数字 static String stuNameMatching = "\\S{1,10}";//1到10个非空格(TAB)字符 static String scoreMatching = "([1-9]?[0-9]|100)"; static String courseNameMatching = "\\S{1,10}";//1到10个非空格(TAB)字符 static String courseTypeMatching = "(选修|必修|实验)"; static String checkCourseTypeMatching = "(考试|考察|实验)"; //cousrInput用于定义课程信息模式(正则表达式) static String courseInput = courseNameMatching + " " + courseTypeMatching + " " + checkCourseTypeMatching; //scoreInput用于定义成绩信息模式(正则表达式) static String scoreInput1 = stuNumMatching + " " + stuNameMatching + " " + courseNameMatching + " " + scoreMatching + "(scoreMatching)?"; static String scoreInput2 = stuNumMatching + " " + stuNameMatching + " " + courseNameMatching + " " + scoreMatching + "(scoreMatching)?"+" "+scoreMatching + "(scoreMatching)?"; public static int matchingInput(String s) { if (matchingCourse(s)) { return 1; } if (matchingScore1(s)) { return 2; } if (matchingScore2(s)) { return 3; } return 0; } static boolean matchingCourse(String s) { return s.matches(courseInput); } static boolean matchingScore1(String s) { return s.matches(scoreInput1); } static boolean matchingScore2(String s) { return s.matches(scoreInput2); }}class chooseCourseList{ static ArrayList chooseCourse=new ArrayList<>(); static boolean searchId(String id){ for (student student : chooseCourse) if (student.number.equals(id)) return true; return false; } static boolean searchCourse(String course){ for (student student : chooseCourse) if (student.course.equals(course)) return true; return false; } static int searchCourseInt(String course){ for(int i=0;i 动物发声模拟器(多态)
public class Main { public static void main(String[] args) { Cat cat = new Cat(); Dog dog = new Dog(); Goat goat = new Goat(); speak(cat); speak(dog); speak(goat); } private static void speak(Animal animal) { System.out.println(animal.getAnimalClass()+"的叫声:"+animal.shout()); } //定义静态方法speak() }//定义抽象类Animalabstract class Animal{ abstract public String getAnimalClass(); abstract public String shout();}//基于Animal类,定义猫类Cat,并重写两个抽象方法class Cat extends Animal{ @Override public String getAnimalClass() { return "猫"; } @Override public String shout() { return "喵喵"; }}//基于Animal类,定义狗类Dog,并重写两个抽象方法class Dog extends Animal{ @Override public String getAnimalClass() { return "狗"; } @Override public String shout() { return "汪汪"; }}//基于Animal类,定义山羊类Goat,并重写两个抽象方法class Goat extends Animal{ @Override public String getAnimalClass() { return "山羊"; } @Override public String shout() { return "咩咩"; }}第八次题目
容器-ArrayList-排序
import java.util.ArrayList;import java.util.Collections;import java.util.Scanner;import java.util.Comparator;class Student { public String id;//学号 public String name;//姓名 public int math;//数学成绩 public int phys;//物理成绩 public int sum;//总分 //构造函数 public Student(String id, String name, int math, int phys) { this.id = id; this.name = name; this.math = math; this.phys = phys; this.sum = math + phys; }}public class Main { public static void main(String[] args) { ArrayListarrayList = new ArrayList<>(); // 用于存储学生信息 Scanner scanner = new Scanner(System.in); while (true) { String line = scanner.nextLine(); if(line.equals("end")) { break; } String[] a = line.split(" "); Student student = new Student(a[0], a[1], Integer.parseInt(a[2]), Integer.parseInt(a[3])); arrayList.add(student); } // 学生按照总分排序,总分相等则按输入顺序 Collections.sort(arrayList, new Comparator () { @Override public int compare(Student s1, Student s2) { // First compare the total score if (s2.sum != s1.sum) { return s2.sum - s1.sum; } // If scores are equal, break ties based on index else { return arrayList.indexOf(s1) - arrayList.indexOf(s2); } } }); // 输出学生信息 for (Student student : arrayList) { System.out.println(student.id + " " + student.name + " " + student.sum); } }} jmu-Java-02基本语法-03-身份证排序
import java.util.ArrayList;import java.util.Collections;import java.util.Comparator;import java.util.Scanner;public class Main { static class IdCard { String id; String birth; public IdCard(String id) { this.id = id; String[] strs = id.split(""); this.birth = strs[6] + strs[7] + strs[8] + strs[9] + "-" + strs[10] + strs[11] + "-" + strs[12] + strs[13]; } public String toString() { return id + " " + birth; } } public static void main(String[] args) { Scanner scanner = new Scanner(System.in); ArrayListidCards = new ArrayList<>(); int n = scanner.nextInt(); scanner.nextLine(); for (int i = 0; i < n; i++) { String id = scanner.nextLine(); idCards.add(new IdCard(id)); } String sortType = scanner.nextLine(); while (true) { if (sortType.equals("sort1")) { sortByIdCardBirth(idCards); } else if (sortType.equals("sort2")) { sortByIdCardBirthAndId(idCards); } else { System.out.println("exit"); break; } sortType = scanner.nextLine(); } } static void sortByIdCardBirth(ArrayList idCards) { // 按出生日期排序 Collections.sort(idCards, new Comparator () { @Override public int compare(IdCard o1, IdCard o2) { return o1.birth.compareTo(o2.birth); } }); // 输出身出生日期 for (IdCard idCard : idCards) { System.out.println(idCard.birth); } } static void sortByIdCardBirthAndId(ArrayList idCards) { // 按出生日期和身份证号码排序 Collections.sort(idCards, new Comparator () { @Override public int compare(IdCard o1, IdCard o2) { int cmp = o1.birth.compareTo(o2.birth); return cmp != 0 ? cmp : o1.id.compareTo(o2.id); } }); // 输出身份证号码 for (IdCard idCard : idCards) { System.out.println(idCard.id); } }} jmu-Java-04面向对象进阶-03-接口-自定义接口ArrayIntegerStack
import java.util.Arrays;import java.util.Scanner;interface IntegerStack { Integer push(Integer item); Integer pop(); Integer peek(); boolean empty(); int size();}class ArrayIntegerStack implements IntegerStack { public Integer[] array; private int top; public ArrayIntegerStack(int n) { array = new Integer[n]; top = 0; } public Integer push(Integer item) { if (item == null || top == array.length) { return null; } array[top++] = item; return item; } public Integer pop() { if (empty()) { return null; } return array[--top]; } public Integer peek() { if (empty()) { return null; } return array[top-1]; } public boolean empty() { return top == 0; } public int size() { return top; }}public class Main { public static void main(String[] args) { Scanner in=new Scanner(System.in); int n = in.nextInt(); ArrayIntegerStack stack = new ArrayIntegerStack(n); int m = in.nextInt(); for(int i=0;ijmu-Java-03面向对象基础-05-覆盖
import java.util.*;public class Main { public static void main(String[] args) { Scanner in = new Scanner(System.in); int n1 = in.nextInt(); PersonOverride[] person1 = new PersonOverride[n1]; for (int i = 0; i < n1; i++) { person1[i] = new PersonOverride(); } int n2 = in.nextInt(); ArrayListperson2 = new ArrayList<>(); for (int i = 0; i < n2; i++) { PersonOverride p = new PersonOverride(in.next(), in.nextInt(), in.nextBoolean()); if (!person2.contains(p)) { person2.add(p); } } in.close(); // print first array of PersonOverride objects for (int i = 0; i < n1; i++) { System.out.println(person1[i]); } for (PersonOverride p : person2) { System.out.println(p); } System.out.println(person2.size()); System.out.println(Arrays.toString(PersonOverride.class.getConstructors())); }}class PersonOverride { private final String name; private final int age; private final boolean gender; public PersonOverride() { this("default", 1, true); } public PersonOverride(String name, int age, boolean gender) { this.name = name; this.age = age; this.gender = gender; } @Override public String toString() { return name + "-" + age + "-" + gender; } @Override public int hashCode() { final int prime = 31; int result = 1; result = prime * result + age; result = prime * result + (gender ? 1231 : 1237); result = prime * result + ((name == null) ? 0 : name.hashCode()); return result; } @Override public boolean equals(Object obj) { if (this == obj) return true; if (obj == null) return false; if (getClass() != obj.getClass()) return false; PersonOverride other = (PersonOverride) obj; if (age != other.age) return false; if (gender != other.gender) return false; if (name == null) { return other.name == null; } else return name.equals(other.name); }} 课程成绩统计程序-3
import java.text.Collator;import java.util.ArrayList;import java.util.Comparator;import java.util.Scanner;public class Main { static boolean isNumber(String isNumber){ try{ int a=Integer.parseInt(isNumber); } catch (NumberFormatException e) { return false; } return true; } public static void main(String[] args) { Scanner input=new Scanner(System.in); String str; studentList students=new studentList(); InputMatching matching=new InputMatching(); chooseCourseList choose=new chooseCourseList(); Cls cls=new Cls(); courseList course=new courseList(); String str1,str2,str3; while(true){ str=input.nextLine(); if(isNumber(str.split(" ")[0]))break; if(str.equals("end"))break; if(InputMatching.matchingInput(str) != 1){ System.out.println("wrong format"); continue; } str1=str.split(" ")[0]; if(course.searchCourse(str1))continue; str2=str.split(" ")[1]; str3=str.split(" ")[2]; if((str2.equals("必修")&&str3.equals("考察"))||(str2.equals("实验")&&!str3.equals("实验")||(!str2.equals("实验")&&str3.equals("实验")))){ System.out.println(str.split(" ")[0]+" : course type & access mode mismatch"); continue; } if(course.searchCourse(str1))continue; course.courses.add(course.addCourse(str1,str2,str3)); } String number,name,subject; int UsualGrades,FinalGrades; boolean flag=false; while(!str.equals("end")){ if(flag)str=input.nextLine(); flag=true; if(str.equals("end"))break; String ssr=str.split(" ")[0]+" "+str.split(" ")[1]+" "+str.split(" ")[2]+" "+str.split(" ")[3]; if (InputMatching.matchingInput(ssr) != 2&&InputMatching.matchingInput(ssr) != 3&&course.searchQuality(str.split(" ")[2])!=2) { System.out.println("wrong format");// 字符串符合成绩信息模式 continue; } if(((Integer.parseInt(str.split(" ")[3]))<4||(Integer.parseInt(str.split(" ")[3]))>9)&&str.split(" ").length>5){ System.out.println("wrong format"); continue; } number=str.split(" ")[0]; String Class = number.substring(0, 6); if (!cls.searchCls(Class)) cls.cls.add(cls.addCls(Class)); name=str.split(" ")[1]; students.stu.add(students.addStudent(number,name)); subject=str.split(" ")[2]; try { if (course.searchQuality(subject) == 1) { UsualGrades = Integer.parseInt(str.split(" ")[3]); if (choose.searchCourse(subject) && choose.searchId(number)) continue; FinalGrades = Integer.parseInt(str.split(" ")[4]); students.students.add(students.addStudentCompulsory(number, name, subject, UsualGrades, FinalGrades)); } else if (course.searchQuality(subject) == 0) { UsualGrades = Integer.parseInt(str.split(" ")[3]); if (choose.searchCourse(subject) && choose.searchId(number)) continue; if (str.split(" ").length > 4) { System.out.println(number + " " + name + " : access mode mismatch"); continue; } students.students.add(students.addStudentTake(number, name, subject, UsualGrades)); } else if (course.searchQuality(subject) == -1) { System.out.println(subject + " does not exist"); } else if (course.searchQuality(subject) == 2) { int testNumber = Integer.parseInt(str.split(" ")[3]); if (str.split(" ").length - 4 != testNumber) { System.out.println(number + " " + name + " : access mode mismatch"); continue; } int sum = 0; for (int i = 0; i < testNumber; i++) { sum += Integer.parseInt(str.split(" ")[4 + i]); } sum /= testNumber; students.students.add(students.addExperimentalGrades(number, name, subject, sum)); } } catch (ArrayIndexOutOfBoundsException e) { System.out.println(number + " " + name + " : access mode mismatch"); } } chooseCourseList chooses=new chooseCourseList(); chooses.getAverageGrade(students,course,cls); }}class student{ int experimentalGrades; String number; String name; String course; int UsualGrades=0; int FinalGrades=0; String Class; int grade=0; public static ComparatorgetNumberComparator() { return Comparator.comparing(s -> s.number); }}class course{ String name; String quality; String manner; public static Comparator getChineseNameComparator() { final Collator collator = Collator.getInstance(java.util.Locale.CHINA); // 获取中文排序规则 return (c1, c2) -> collator.compare(c1.name, c2.name); }}class courseList{ ArrayList courses=new ArrayList<>(); boolean searchCourse(String CourseName){ for (course cours : courses) if (cours.name.equals(CourseName)) return true; return false; } course addCourse( String name,String quality,String manner){ course newCourse=new course(); newCourse.name=name; newCourse.quality=quality; newCourse.manner=manner; return newCourse; } int searchQuality(String subject){ for (course course : courses) { if (course.name.equals(subject) && course.quality.equals("必修")) return 1; else if (course.name.equals(subject) && course.manner.equals("考试")) return 1; else if (course.name.equals(subject)&&course.quality.equals("实验"))return 2; else if (course.name.equals(subject)&&course.manner.equals("实验"))return 2; else if (course.name.equals(subject)) return 0; } return -1; }}class studentList { ArrayList students = new ArrayList<>(); ArrayList stu = new ArrayList<>(); student addStudentCompulsory(String number, String name, String course, int UsualGrades, int FinalGrades) { student newStudent = new student(); chooseCourseList newChoose = new chooseCourseList(); newStudent.name = name; if(chooseCourseList.searchCourse(course)&& chooseCourseList.chooseCourse.get(chooseCourseList.searchCourseInt(course)).name.equals(name)&& chooseCourseList.chooseCourse.get(chooseCourseList.searchCourseInt(course)).number.equals(number)) return null; Cls newCls = new Cls(); newStudent.number = number; newStudent.course = course; newStudent.grade = (int) (FinalGrades * 0.7 + UsualGrades * 0.3); String Class = number.substring(0, 6); if (!newCls.searchCls(Class)) newCls.cls.add(newCls.addCls(Class)); chooseCourseList.chooseCourse.add(newChoose.addChoose(number, name, course, Class, UsualGrades, FinalGrades, newStudent.grade)); return newStudent; } student addStudentTake(String number, String name, String course, int UsualGrades) { student newStudent = new student(); newStudent.name = name; newStudent.number = number; newStudent.course = course; newStudent.grade = UsualGrades; String Class=number.substring(0,6); chooseCourseList newChoose = new chooseCourseList(); if(chooseCourseList.searchCourse(course)&& chooseCourseList.chooseCourse.get(chooseCourseList.searchCourseInt(course)).name.equals(name)&& chooseCourseList.chooseCourse.get(chooseCourseList.searchCourseInt(course)).number.equals(number)) return null; chooseCourseList.chooseCourse.add(newChoose.addChooseTake(number, name, course, Class, UsualGrades, newStudent.grade)); return newStudent; } student addExperimentalGrades(String number, String name, String course, int experimentalGrades) { student newStudent = new student(); newStudent.name = name; newStudent.number = number; newStudent.course = course; newStudent.experimentalGrades = experimentalGrades; newStudent.grade = experimentalGrades; String Class=number.substring(0,6); chooseCourseList newChoose = new chooseCourseList(); if(chooseCourseList.searchCourse(course)&& chooseCourseList.chooseCourse.get(chooseCourseList.searchCourseInt(course)).name.equals(name)&& chooseCourseList.chooseCourse.get(chooseCourseList.searchCourseInt(course)).number.equals(number)) return null; chooseCourseList.chooseCourse.add(newChoose.addChooseExperimental(number, name, course, Class, experimentalGrades,newStudent.grade)); return newStudent; } student addStudent(String id, String name) { student newStudent = new student(); newStudent.number = id; newStudent.name = name; return newStudent; } boolean searchStudent(String name) { for (student student : students) { if (student.name.equals(name)) return true; } return false; }}class Cls { private static int nextIndex = 0; String id; private int index; ArrayList cls = new ArrayList<>(); public Cls addCls(String cl) { Cls newCls = new Cls(); newCls.id = cl; // 新增元素的 index 应该为当前列表长度 newCls.index = nextIndex++; cls.add(newCls); return newCls; } public boolean searchCls(String id) { for (int i = 0; i < cls.size(); i++) { if (cls.get(i).id.equals(id)) { return true; } } return false; } public static Comparator getIndexComparator() { return new Comparator () { @Override public int compare(Cls c1, Cls c2) { return c1.id.compareTo(c2.id); } }; }}class InputMatching { static String stuNumMatching = "[0-9]{8}";//8个0-9的数字 static String stuNameMatching = "\\S{1,10}";//1到10个非空格(TAB)字符 static String scoreMatching = "([1-9]?[0-9]|100)"; static String courseNameMatching = "\\S{1,10}";//1到10个非空格(TAB)字符 static String courseTypeMatching = "(选修|必修|实验)"; static String checkCourseTypeMatching = "(考试|考察|实验)"; //cousrInput用于定义课程信息模式(正则表达式) static String courseInput = courseNameMatching + " " + courseTypeMatching + " " + checkCourseTypeMatching; //scoreInput用于定义成绩信息模式(正则表达式) static String scoreInput1 = stuNumMatching + " " + stuNameMatching + " " + courseNameMatching + " " + scoreMatching + "(scoreMatching)?"; static String scoreInput2 = stuNumMatching + " " + stuNameMatching + " " + courseNameMatching + " " + scoreMatching + "(scoreMatching)?"+" "+scoreMatching + "(scoreMatching)?"; public static int matchingInput(String s) { if (matchingCourse(s)) { return 1; } if (matchingScore1(s)) { return 2; } if (matchingScore2(s)) { return 3; } return 0; } static boolean matchingCourse(String s) { return s.matches(courseInput); } static boolean matchingScore1(String s) { return s.matches(scoreInput1); } static boolean matchingScore2(String s) { return s.matches(scoreInput2); }}class chooseCourseList{ static ArrayList chooseCourse=new ArrayList<>(); static boolean searchId(String id){ for (student student : chooseCourse) if (student.number.equals(id)) return true; return false; } static boolean searchCourse(String course){ for (student student : chooseCourse) if (student.course.equals(course)) return true; return false; } static int searchCourseInt(String course){ for(int i=0;i 三、主要困难及改进建议
长方法:代码中的一些方法非常长,并且包含大量的嵌套if语句和循环。将这些方法拆分成更小的、可重用的方法可以提高代码的可读性和可维护性。
缺少异常处理:代码没有足够的异常处理机制来处理可能出现的异常情况。这可能导致程序意外终止或产生不正确的结果。建议添加适当的异常处理和错误处理机制。
- 提取公共方法:将输入合法性验证和错误处理的逻辑提取为独立的方法,以提高代码的可读性和可维护性。可以考虑设计一个输入处理类,将输入的合法性判断、错误处理和信息存储等功能封装在该类中,使得代码更加模块化和易于扩展。
- 代码规范和格式化:遵循Java的代码规范和风格,例如使用适当的缩进、对齐、大括号放置等。这样可以使代码更一致,易于阅读和维护。
四、总结
学到了:
1. 了解了一个学生成绩管理系统的基本功能和实现方式。2. 熟悉了使用面向对象的思想进行代码设计和封装,以及使用类和对象管理数据。3. 掌握了使用正则表达式对输入合法性进行验证的方法。4. 学会了使用循环、条件语句和数组等基本编程技巧处理输入数据和进行相应的操作。5. 理解了优化代码的重要性,如提取公共方法、减少重复代码、简化逻辑和数据结构等,以提高代码的可读性、可维护性和性能。6. 意识到代码中存在的一些问题,如冗余逻辑、重复代码和不合理的数据结构设计。
需要进一步学习和研究的方面包括:
1. 异常处理:深入学习异常处理的原理和机制,在代码中灵活运用异常处理来提高代码的健壮性和可维护性。2. 设计模式:学习和掌握常用的设计模式,以提高代码的可重用性、可扩展性和可维护性。3. 大型项目架构和设计:了解大型项目的架构设计原则、模块划分、层次结构等,学习如何进行系统性的项目规划和架构设计。4. 性能优化:进一步学习如何进行代码和程序的性能优化,减少资源的消耗,并提高系统的响应速度和稳定性。5. 设计原则和编码规范:学习常用的设计原则和编码规范,如单一职责原则、开闭原则、代码重构等,用于指导和规范自己的代码编写。