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类表示一个学生,包含了NameID等属性以及用于存储学生最终成绩和课程的数组。它还有一些方法用于添加课程和更新每个课程的成绩。

Lesson类表示一个课程或科目,包含了NameRequiredTest等属性(表示是否必修课和测试类型)。它还有一些方法用于添加测试成绩和持续时间成绩。

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);        HashMap students = 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);        HashMap students = 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 Comparator getNumberComparator() {        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{    ArrayListcourses=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) {        ArrayList arrayList = 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);        ArrayList idCards = 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;i

jmu-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();        ArrayList person2 = 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 Comparator getNumberComparator() {        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{    ArrayListcourses=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

三、主要困难及改进建议

  1. 长方法:代码中的一些方法非常长,并且包含大量的嵌套if语句和循环。将这些方法拆分成更小的、可重用的方法可以提高代码的可读性和可维护性。

  2. 缺少异常处理:代码没有足够的异常处理机制来处理可能出现的异常情况。这可能导致程序意外终止或产生不正确的结果。建议添加适当的异常处理和错误处理机制。

  3. 提取公共方法:将输入合法性验证和错误处理的逻辑提取为独立的方法,以提高代码的可读性和可维护性。可以考虑设计一个输入处理类,将输入的合法性判断、错误处理和信息存储等功能封装在该类中,使得代码更加模块化和易于扩展。
  4. 代码规范和格式化:遵循Java的代码规范和风格,例如使用适当的缩进、对齐、大括号放置等。这样可以使代码更一致,易于阅读和维护。

四、总结

学到了:

1. 了解了一个学生成绩管理系统的基本功能和实现方式。2. 熟悉了使用面向对象的思想进行代码设计和封装,以及使用类和对象管理数据。3. 掌握了使用正则表达式对输入合法性进行验证的方法。4. 学会了使用循环、条件语句和数组等基本编程技巧处理输入数据和进行相应的操作。5. 理解了优化代码的重要性,如提取公共方法、减少重复代码、简化逻辑和数据结构等,以提高代码的可读性、可维护性和性能。6. 意识到代码中存在的一些问题,如冗余逻辑、重复代码和不合理的数据结构设计。

需要进一步学习和研究的方面包括:

1. 异常处理:深入学习异常处理的原理和机制,在代码中灵活运用异常处理来提高代码的健壮性和可维护性。2. 设计模式:学习和掌握常用的设计模式,以提高代码的可重用性、可扩展性和可维护性。3. 大型项目架构和设计:了解大型项目的架构设计原则、模块划分、层次结构等,学习如何进行系统性的项目规划和架构设计。4. 性能优化:进一步学习如何进行代码和程序的性能优化,减少资源的消耗,并提高系统的响应速度和稳定性。5. 设计原则和编码规范:学习常用的设计原则和编码规范,如单一职责原则、开闭原则、代码重构等,用于指导和规范自己的代码编写。

标签:

X
X

Copyright ©  2015-2022 亚太信息网版权所有  备案号:沪ICP备2020036824号-11   联系邮箱: 562 66 29@qq.com