PTA6-8总结报告_天天关注
前言:
题目集六涉及的知识点有: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. 设计原则和编码规范:学习常用的设计原则和编码规范,如单一职责原则、开闭原则、代码重构等,用于指导和规范自己的代码编写。
标签:
-
2023-06-29 06:17:13
PTA6-8总结报告_天天关注<
前言:题目集六涉及的知识点有:1 利用Arrays sort()方法根据某些标准
-
2023-06-29 05:33:44
今日热议:田亚平_关于田亚平介绍<
田亚平,关于田亚平介绍这个很多人还不知道,我们一起来看看!1、田亚平
-
2023-06-29 03:58:41
航空机场板块6月28日涨0.5%,中国国航领涨,主力资金净流入4371.68万元 世界快报<
6月28日航空机场板块较上一交易日上涨0 5%,中国国航领涨。当日上证指
-
2023-06-29 01:40:25
天堂制造超燃混剪_天堂制造<
1、绯红之王的能力:时间删除:能将消除这个世界上十几秒的时间,所有
-
2023-06-28 23:28:23
17 意外的发展<
下山的时候段正诚显得心事重重,将手上的资料和线索与戌亥警官交流后,
-
2023-06-29 06:17:13
PTA6-8总结报告_天天关注
前言:题目集六涉及的知识点有:1 利用Arrays sort()方法根据某些标准
-
2023-06-29 05:33:44
今日热议:田亚平_关于田亚平介绍
田亚平,关于田亚平介绍这个很多人还不知道,我们一起来看看!1、田亚平
-
2023-06-29 05:21:07
四川:两架“海燕号”气探型高空大型无人机交付使用
6月28日,国家级机动观测业务启动暨无人机交付活动在四川省自贡市
-
2023-06-29 03:58:41
航空机场板块6月28日涨0.5%,中国国航领涨,主力资金净流入4371.68万元 世界快报
6月28日航空机场板块较上一交易日上涨0 5%,中国国航领涨。当日上证指
-
2023-06-29 03:46:17
印第安老斑鸠是什么意思知乎_印第安老斑鸠是什么意思-世界微头条
755-79000是周杰伦即兴创作的一首歌。按照一些网友的推测,当时歌手想
-
2023-06-29 01:40:25
天堂制造超燃混剪_天堂制造
1、绯红之王的能力:时间删除:能将消除这个世界上十几秒的时间,所有
-
2023-06-29 01:23:26
“四学四强”建新功|数字赋能“链”入未来|天天视点
学习贯彻习近平新时代中国特色社会主义思想主题教育开展以来,徐矿集团
-
2023-06-28 23:28:23
17 意外的发展
下山的时候段正诚显得心事重重,将手上的资料和线索与戌亥警官交流后,
-
2023-06-28 21:37:42
于淼tvb个人资料_于淼tvb个人资料 天天时讯
于淼是在2月23日出生,星座属于:双鱼座,最高学历:大学。本文到此结束
-
2023-06-28 23:05:56
观点:海南椰岛独董李力辞职
南都·湾财社讯海南椰岛股份有限公司(600238)董事会于6月28日接到公
-
2023-06-28 21:50:03
被印度诈骗88亿、又反被索赔21亿?上海电气声明:严重歪曲事实 观焦点
印度孟买法院已于2022年驳回印度Reliance(报道所称“信实公司”)曾向上
-
2023-06-28 22:38:02
徐州18家单位上榜“环保示范”
为加快环保信用体系建设,树立守信激励正面导向,打造一批绿色环保示范
-
2023-06-28 22:08:32
西博会“搭台” 市州登场端“硬菜”_全球报资讯
第十九届西博会开幕前夕,多个市州开展招商引资相关活动。
-
2023-06-28 20:28:46
36氪首发|消费科技品牌Nothing获9600万美元新一轮融资,全球销量突破150万台
36氪获悉,近日,消费科技创业公司Nothing完成新一轮9600万美元融资,
-
2023-06-28 15:03:42
成本直降70%的秘密:这些企业找到了一种高性价比的AI打开方式_天天微头条
这些公司正在用CPU承载AI任务。近半年来,ChatGPT所带来的AI热度是大家
-
2023-06-28 20:38:48
青岛赶海小技巧
螃蟹方式1:小螃蟹一般喜欢躲在浅海区的石缝中或是石头底下,用小耙子
-
2023-06-28 18:26:12
达沃斯声音|中国向世界传递信心|天天新动态
达沃斯声音|中国向世界传递信心,中国,王宇,王烁,达沃斯论坛
-
2023-06-28 17:56:23
无措仓惶的全部小说_无措仓惶
1、无赦系列,缭绕擎苍,执易,无措的文风格都差不多,你找他的就行了
-
2023-06-28 16:17:45
csgo饰品价格在哪查询 csgo饰品价格查询官网
CS:GO免费开箱【点击进入】老牌开箱网+超高爆率+一秒发货CSGO开箱APP【
-
2023-06-28 16:08:09
最受欢迎男歌手排行榜_最受欢迎男歌手
1、1 周杰伦2 林俊杰3 王力宏4 潘玮柏5 刘德华6 张学友7 罗志祥8 吴克
-
2023-06-28 15:51:27
世界通讯!华统股份:截至本公告日,上海华俭食品科技有限公司累计质押股数为7932万股
华统股份(SZ002840,收盘价:元)6月28日晚间发布公告称,截至本公告
-
2023-06-28 15:26:07
大宗交易:华岭股份成交140.3万元,折价5.75%(06-28) 世界观天下
2023年6月28日,华岭股份发生了1笔大宗交易,总成交万股,成交金额万元
-
2023-06-28 14:41:22
成品油价今晚上调 预计小轿车加满一箱油多掏两三元 世界速看料
石榴云 新疆日报讯(记者于江艳通讯员孙筱报道)6月28日24时,新一轮汽
-
2023-06-28 15:34:12
舆论观察室丨美国学者重申北约东扩是俄乌冲突根源 每日聚焦
俄乌冲突以来,以美国为首的北约不但没有劝和促谈,反而不断加码对乌克
-
2023-06-28 14:53:46
世界百事通!吉林银行长春榆树支行:创新服务助推活体贷款“换挡提速”
近年来,随着吉林省“秸秆变肉”暨千万头肉牛建设工程实施以来,吉林银
-
2023-06-28 15:05:25
天天快资讯:国奥队是在哪个级别的联赛(国奥队赛程)
来为大家解答以上的问题。国奥队是在哪个级别的联赛,国奥队赛程这个很
-
2023-06-28 14:04:10
天天快看:江苏常州一公司发生火情,消防:明火已扑灭,燃烧物为少量桶装废弃润滑油
据@常州消防微博消息,6月28日10时11分,常州市消防救援支队指挥中心接
-
2023-06-28 13:45:46
以全国生态日为契机推动全社会践行“绿水青山就是金山银山”理念
本报讯记者赵晨熙6月26日,十四届全国人大常委会第三次会议对关于设立
-
2023-06-28 12:02:50
彩金群英会金币价格今天多少一克(2023年06月28日)
金投网提供彩金群英会金币价格今天多少一克(2023年06月28日),彩金群
-
2023-06-28 12:06:26
世界动态:国家统计局:今年1—5月份全国规模以上工业企业利润下降18.8%
国家统计局:今年1—5月份全国规模以上工业企业利润下降18 8%
-
特写:风吹稻香忆袁老——袁隆平逝世一周年的墓前追思
2022-05-23 16:13:29 -
北京5月21日区域核酸筛查初筛10管混采阳性
2022-05-23 16:13:29 -
北京两地由高风险降为中风险 一地降为低风险地区
2022-05-23 16:13:29 -
5月21日15时至22日15时,北京新增本土新冠肺炎病毒感染者94例
2022-05-23 16:13:29 -
108岁病人顺利出院,瑞金医院卢湾分院已收治10位百岁老人
2022-05-23 16:13:29 -
生态花园助力乡村振兴 重庆小山村展现“乡土美学”
2022-05-23 16:13:29 -
上海金山政务服务场所逐步恢复服务
2022-05-23 16:13:29