BLOG3作业总结

发布时间 2023-12-09 20:29:47作者: 杀手少年
7-3 课程成绩统计程序-2
分数 60
作者 蔡轲
单位 南昌航空大学

课程成绩统计程序-2在第一次的基础上增加了实验课,以下加粗字体显示为本次新增的内容。

某高校课程从性质上分为:必修课、选修课、实验课,从考核方式上分为:考试、考察、实验。

考试的总成绩由平时成绩、期末成绩分别乘以权重值得出,比如平时成绩权重0.3,期末成绩权重0.7,总成绩=平时成绩*0.3+期末成绩*0.7。

考察的总成绩直接等于期末成绩

实验的总成绩等于课程每次实验成绩的平均分

必修课的考核方式必须为考试,选修课可以选择考试、考察任一考核方式。实验课的成绩必须为实验。

1、输入:

包括课程、课程成绩两类信息。

课程信息包括:课程名称、课程性质、考核方式(可选,如果性质是必修课,考核方式可以没有)三个数据项。

课程信息格式:课程名称+英文空格+课程性质+英文空格+考核方式

课程性质输入项:必修、选修、实验

考核方式输入选项:考试、考察、实验

考试/考查课程成绩信息包括:学号、姓名、课程名称、平时成绩(可选)、期末成绩

考试/考查课程信息格式:学号+英文空格+姓名+英文空格+课程名称+英文空格+平时成绩+英文空格+期末成绩

实验课程成绩信息包括:学号、姓名、课程名称、实验次数、每次成绩

实验次数至少4次,不超过9次

实验课程信息格式:学号+英文空格+姓名+英文空格+课程名称+英文空格+实验次数+英文空格+第一次实验成绩+...+英文空格+最后一次实验成绩

以上信息的相关约束:

1)平时成绩和期末成绩的权重默认为0.3、0.7

2)成绩是整数,不包含小数部分,成绩的取值范围是【0,100】

3)学号由8位数字组成

4)姓名不超过10个字符

5)课程名称不超过10个字符

6)不特别输入班级信息,班级号是学号的前6位。

2、输出:

输出包含三个部分,包括学生所有课程总成绩的平均分、单门课程成绩平均分、单门课程总成绩平均分、班级所有课程总成绩平均分。

为避免误差,平均分的计算方法为累加所有符合条件的单个成绩,最后除以总数。

1)学生课程总成绩平均分按学号由低到高排序输出

格式:学号+英文空格+姓名+英文空格+总成绩平均分

如果某个学生没有任何成绩信息,输出:学号+英文空格+姓名+英文空格+"did not take any exams"

2)单门课程成绩平均分分为三个分值:平时成绩平均分(可选)、期末考试平均分、总成绩平均分,按课程名称的字符顺序输出

考试/考察课程成绩格式:课程名称+英文空格+平时成绩平均分+英文空格+期末考试平均分+英文空格+总成绩平均分

实验课成绩格式:课程名称+英文空格+总成绩平均分

如果某门课程没有任何成绩信息,输出:课程名称+英文空格+"has no grades yet"

3)班级所有课程总成绩平均分按班级由低到高排序输出

格式:班级号+英文空格+总成绩平均分

如果某个班级没有任何成绩信息,输出:班级名称+英文空格+ "has no grades yet"

异常情况:

1)如果解析某个成绩信息时,课程名称不在已输入的课程列表中,输出:学号+英文空格+姓名+英文空格+":"+课程名称+英文空格+"does not exist"

2)如果解析某个成绩信息时,输入的成绩数量和课程的考核方式不匹配,输出:学号+英文空格+姓名+英文空格+": access mode mismatch"

以上两种情况如果同时出现,按第一种情况输出结果。

3)如果解析某个课程信息时,输入的课程性质和课程的考核方式不匹配,输出:课程名称+" : course type & access mode mismatch"

4)格式错误以及其他信息异常如成绩超出范围等,均按格式错误处理,输出"wrong format"

5)若出现重复的课程/成绩信息,只保留第一个课程信息,忽略后面输入的。

信息约束:

1)成绩平均分只取整数部分,小数部分丢弃

参考类图(与第一次相同,其余内容自行补充):


e724fa4193aa9ee32e78a68cd96fd6df_22401e04-c501-4b28-bb65-dabe39d374e7.png

 

输入样例1:

在这里给出一组输入。例如:

java 实验 实验
20201103 张三 java 4 70 80 90
end

输出样例1:

在这里给出相应的输出。例如:

20201103 张三 : access mode mismatch
20201103 张三 did not take any exams
java has no grades yet
202011 has no grades yet

输入样例2:

在这里给出一组输入。例如:

java 实验 实验
20201103 张三 java 3 70 80 90
end

输出样例2:

在这里给出相应的输出。例如:

wrong format
java has no grades yet

输入样例3:

在这里给出一组输入。例如:

java 必修 实验
20201103 张三 java 3 70 80 90 100
end

输出样例3:

在这里给出相应的输出。例如:

java : course type & access mode mismatch
wrong format

输入样例4:

在这里给出一组输入。例如:

java 必修 实验
20201103 张三 java 4 70 80 90 105
end

输出样例4:

在这里给出相应的输出。例如:

java : course type & access mode mismatch
wrong format

 

输入样例5:

在这里给出一组输入。例如:

java 选修 考察
C语言 选修 考察
java实验 实验 实验
编译原理 必修 考试
20201101 王五 C语言 76
20201216 李四 C语言 78
20201307 张少军 编译原理 82 84
20201103 张三 java实验 4 70 80 90 100
20201118 郑觉先 java 80
20201328 刘和宇 java 77
20201220 朱重九 java实验 4 60 60 80 80
20201132 王萍 C语言 40
20201302 李梦涵 C语言 68
20201325 崔瑾 编译原理 80 84
20201213 黄红 java 82
20201209 赵仙芝 java 76
end

输出样例5:

在这里给出相应的输出。例如:

20201101 王五 76
20201103 张三 85
20201118 郑觉先 80
20201132 王萍 40
20201209 赵仙芝 76
20201213 黄红 82
20201216 李四 78
20201220 朱重九 70
20201302 李梦涵 68
20201307 张少军 83
20201325 崔瑾 82
20201328 刘和宇 77
C语言 65 65
java 78 78
java实验 77
编译原理 81 84 82
202011 70
202012 76
202013 77
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        
        String color = input.next();
        int layer = input.nextInt();
        double side = input.nextDouble();        
        
        RubikCube cube1 = new SquareCube(color, layer,new Cube(side)); 
                
        color = input.next();
        layer = input.nextInt();
        side = input.nextDouble();
        
        RubikCube cube2 = new RegularPyramidCube(color, layer,new RegularPyramid(side));
        display(cube1);
        display(cube2);
    }
    
    public static void display(RubikCube cube) {
        System.out.println(cube.getColor());
        System.out.println(String.format("%.2f", cube.getSurfaceArea()));
        System.out.println(String.format("%.2f", cube.getVolume()));
    }
}

abstract class RubikCube {
    private String color;
    private int layer;
    private Solid solid;
    
    public RubikCube(String color, int layer, Solid solid) {
        this.color = color;
        this.layer = layer;
        this.solid = solid;
    }
    
    public String getColor() {
        return color;
    }
    
    public double getSurfaceArea() {
        double unitSurfaceArea = solid.getSurfaceArea();
        double surfaceArea = layer * layer * unitSurfaceArea;
        return surfaceArea;
    }
    
    public double getVolume() {
        double unitVolume = solid.getVolume();
        double volume = layer * layer * layer * unitVolume;
        return volume;
    }
}

class SquareCube extends RubikCube {
    public SquareCube(String color, int layer, Solid solid) {
        super(color, layer, solid);
    }
}

class RegularPyramidCube extends RubikCube {
    public RegularPyramidCube(String color, int layer, Solid solid) {
        super(color, layer, solid);
    }
}

abstract class Solid {
    public abstract double getSurfaceArea();
    public abstract double getVolume();
}

class Cube extends Solid {
    private double side;
    
    public Cube(double side) {
        this.side = side;
    }
    
    public double getSurfaceArea() {
        return 6 * side * side;
    }
    
    public double getVolume() {
        return side * side * side;
    }
}

class RegularPyramid extends Solid {
    private double baseSide;
    private double height;
    
    public RegularPyramid(double baseSide) {
        this.baseSide = baseSide;
        this.height = baseSide * Math.sqrt(2) / 2;
    }
    
    public double getSurfaceArea() {
        double baseArea = baseSide * baseSide;
        double slantHeight = Math.sqrt(height * height + (baseSide / 2) * (baseSide / 2));
        double lateralArea = baseSide * slantHeight;
        
        return baseArea + 4 * lateralArea;
    }
    
    public double getVolume() {
        return baseSide * baseSide * height / 3;
    }
}

 

public class Main {

    public static void main(String[] args) {
        @SuppressWarnings("resource")
        Scanner sc=new Scanner(System.in);
        String data;//输入一行数据
        String[] arr=new String[100];
        data=sc.nextLine();
        arr=data.split(" ");
        int flag3=0,input=0,i=0,j=0,k=0,konggenum=0,avsum=0,flag=0,flag1=0,avsumps=0,avsumqm=0,avsum1=0,avsum2=0,grade=0,index=0,qz=0,qm1=0;
        double gradesy=0;
        ArrayList<Choose> chooselist=new ArrayList<>();
        ArrayList<Classroom> classroomlist=new ArrayList<>();
        HashMap<Integer, Student> smap=new HashMap<Integer,Student>();
        HashMap<String, Course> cmap=new HashMap<String,Course>();
        HashMap<Integer, Integer> cjmap=new HashMap<Integer,Integer>();
        Course course=new Course();
        Classroom checkclass=new Classroom();
        Student student=new Student();
        Examgrade examgrade=new Examgrade();
        Inspectgrade inspectgrade=new Inspectgrade();
        Experiment experiment=new Experiment();
        Choose choose=new Choose();
        String coursename=null,classnum=null;
        double ps=0,qm=0,quanz=0;
        while(true) {
            if(data.equals("end"))
                break;
            else
            {
                konggenum=Jugde.kongge(data);//空格数
                input=Jugde.input(arr,cmap,konggenum);
                switch(input)
                {
                    case 1://加课程信息
                    {
                            if(arr[1].equals("必修") && arr[2].equals("考察"))
                                System.out.println(arr[0] + " : course type & access mode mismatch");
                            else if((arr[1].equals("实验")&&!arr[2].equals("实验"))||(!arr[1].equals("实验")&&arr[2].equals("实验")))
                                System.out.println(arr[0] + " : course type & access mode mismatch");
                            else
                            {
                                if(!Jugde.checkcf(cmap,arr[0]))//没有重复的课
                                {
                                    if(arr[2].equals("实验"))
                                    {
                                        if(Integer.valueOf(arr[3])!=arr.length-4)
                                        {
                                            flag3=1;
                                            System.out.println(arr[0]+" : number of scores does not match");
                                        }
                                        else
                                        {
                                            for(i=4;i<arr.length;i++)
                                                quanz+=Double.valueOf(arr[i]);
                                            if(quanz!=1.0)
                                            {
                                                flag3=1;
                                                System.out.println(arr[0]+" : weight value error");
                                            }
                                        }
                                        quanz=0;
                                    }
                                    if(arr[2].equals("考试"))
                                    {
                                        if(arr.length-3!=2)
                                        {
                                            flag3=1;
                                            System.out.println(arr[0]+" : number of scores does not match");
                                        }
                                        else
                                        {
                                            quanz+=Double.valueOf(arr[3]);
                                            quanz+=Double.valueOf(arr[4]);
                                            if(quanz/1.0!=0)
                                            {
                                                flag3=1;
                                                System.out.println(arr[0]+" : weight value error");
                                            }    
                                        }
                                        quanz=0;
                                    }
                                    if(flag3==0)
                                        cmap.put(arr[0],new Course(arr[0],arr[1],arr[2],data));
                                }
                            }
                        }
                        break;
                    case 2://加课程成绩信息
                    {
                        if(!Jugde.getsingle(chooselist,arr[0]+arr[1]+arr[2]))//如果没有重复的成绩信息
                        {
                            smap.put(Integer.valueOf(arr[0]),new Student(Integer.valueOf(arr[0]),arr[1]));
                            checkclass=Jugde.checkclass(arr[0].substring(0,6),classroomlist);//查是否已有该班级
                            course=Jugde.checkcourse(arr[2],cmap);//查是否已有该课程
                            if(checkclass!=null)//如果找到该班号
                            {
                                if(!Jugde.studentcf(classroomlist,arr[0]))
                                {
                                    checkclass.code=Integer.valueOf(arr[0].substring(0,6));//班号
                                    checkclass.list.add(new Student(Integer.valueOf(arr[0]),arr[1]));//在班级类中的学生数组加上学生
                                }
                            }
                            else//如果没找到该班号
                                classroomlist.add(new Classroom(Integer.valueOf(arr[0].substring(0,6)),new Student(Integer.valueOf(arr[0]),arr[1])));//在班级数组中加上该班
                            if(Jugde.checkcourse(arr[2],cmap)==null)//找不到该课程信息
                            {
                                System.out.println(arr[2]+" does not exist");//课程不存在
                                flag=0;
                                break;
                            }
                            else
                            {
                                if(Jugde.checkcourse(arr[2],cmap).assessmethod.equals("考试"))//考试成绩
                                    if(arr.length==5)//考核方式与输入的成绩量匹配
                                    {
                                        flag=1;
                                        if(Jugde.checkcourse(arr[2], cmap)!=null)
                                            course=Jugde.checkcourse(arr[2], cmap);
                                        qz=(int)(Double.valueOf(arr[3])*course.quanz.get(0));
                                        qm1=(int)(Double.valueOf(arr[4])*course.quanz.get(1));
                                    }
                                if(Jugde.checkcourse(arr[2],cmap).assessmethod.equals("考察"))//考察成绩
                                    if(arr.length==4)//考核方式与输入的成绩量匹配
                                        flag=2;
                                if(Jugde.checkcourse(arr[2],cmap).assessmethod.equals("实验"))//实验成绩
                                    if(Jugde.checkassess(arr[2], arr.length-3, cmap)!=null)//考核方式与输入的成绩量匹配
                                    {
                                        course=Jugde.checkassess(arr[2], arr.length-3, cmap);
                                        flag=3;
                                        for(i=0;i<arr.length-3;i++)
                                            gradesy+=Double.valueOf(arr[i+3])*course.quanz.get(i);

                                        grade=(int)gradesy;
                                    }
                                if(flag==0)
                                {
                                    System.out.println(arr[0]+" "+arr[1]+" : access mode mismatch");//成绩数量和课程的考核方式不匹但课程存在
                                    break;
                                }
                            }
                            if(flag==1)//判断是考试课还是考察课
                                chooselist.add(new Choose(new Student(Integer.valueOf(arr[0]),arr[1]),Jugde.checkcourse(arr[2],cmap),new Examgrade(qz,qm1)));//在选课数组中加上选课
                            if(flag==2)
                                chooselist.add(new Choose(new Student(Integer.valueOf(arr[0]),arr[1]),Jugde.checkcourse(arr[2],cmap),new Inspectgrade(Integer.valueOf(arr[3]))));//在选课数组中加上选课
                            if(flag==3)
                                chooselist.add(new Choose(new Student(Integer.valueOf(arr[0]),arr[1]),Jugde.checkcourse(arr[2],cmap),new Experiment(grade)));//在选课数组中加上选课
                            flag=0;
                            gradesy=0;
                            grade=0;        
                        }
                        break;
                    }
                    case 0://数据异常
                    {
                        System.out.println("wrong format");
                        break;
                    }
                }
            }
            data=sc.nextLine();
            arr=data.split("\\s+");
        }
        //调用sortHashMap()排序并返回新的集合
        HashMap<Integer,Student> sort = Jugde.sortHashMap(smap);//将hash里面的学生学号进行排序
        for(Entry<Integer,Student> entry:sort.entrySet())
        {
            student=entry.getValue();
            for(i=0,j=0;i<chooselist.size();i++)
            {
                choose=chooselist.get(i);
                if(choose.student.name.equals(student.name)&&choose.student.num==student.num)
                {
                    j++;
                    if(choose.grade instanceof Examgrade)//如果是考试课
                    {
                        examgrade=(Examgrade)choose.grade;
                        examgrade.getgrade();
                    }
                    if(choose.grade instanceof Inspectgrade)//如果是考察课
                    {
                        inspectgrade=(Inspectgrade)choose.grade;
                        inspectgrade.getgrade();
                    }
                    if(choose.grade instanceof Experiment)//如果是实验课
                    {
                        experiment=(Experiment)choose.grade;
                        experiment.getgrade();
                    }
                    avsum+=choose.grade.sumgrade;
                    flag1=1;
                }
            }
            if(flag1==0)//选课类中没有该学生
                System.out.println(student.num+" "+student.name+" did not take any exams");
            else
            {
                avsum/=j;
                cjmap.put(student.num,avsum);
                System.out.println(student.num+" "+student.name+" "+avsum);
            }
            avsum=0;
            flag1=0;
        }

        List<Entry<String,Course>> clist=new ArrayList<>(cmap.entrySet());//对课程排序
        Collections.sort(clist,new Comparator<Entry<String,Course>>(){
            @Override
            public int compare(Entry<String, Course> o1, Entry<String, Course> o2) {
                // TODO Auto-generated method stub
                Collator instance=Collator.getInstance(Locale.CHINA);
                return instance.compare(o1.getKey(),o2.getKey());
            }
        });
        for (i=0;i<clist.size();i++){
            Entry<String, Course> ccmap=clist.get(i);
            coursename=ccmap.getKey();
            for(j=0,k=0;j<chooselist.size();j++)
            {
                choose=chooselist.get(j);
                if(coursename.equals(choose.course.name))//如果找到选课里面的课程
                {
                    k++;
                    if(choose.grade instanceof Examgrade)//如果是考试课
                    {
                        examgrade=(Examgrade)choose.grade;
                        avsumps+=examgrade.dailygrade;
                        avsumqm+=examgrade.finalgrade;
                        avsum1+=examgrade.sumgrade;
                        flag1=2;
                    }
                    if(choose.grade instanceof Inspectgrade)//如果是考察课
                    {
                        inspectgrade=(Inspectgrade)choose.grade;
                        avsumqm+=inspectgrade.finalgrade;
                        avsum1+=inspectgrade.sumgrade;
                        flag1=3;
                    }
                    if(choose.grade instanceof Experiment)//如果是实验课
                    {
                        experiment=(Experiment)choose.grade;
                        avsumqm+=experiment.finalgrade;
                        avsum1+=experiment.sumgrade;
                        flag1=4;
                    }
                }
            }
            if(flag1==0)//选课类中没有该课程
                System.out.println(coursename+" has no grades yet");
            else
            {
                if(flag1==2)//该课程为考试课
                {
                    ps=avsumps/10.0;
                    qm=avsumqm/10.0;
                    ps*=3;
                    qm*=7;
                    avsumps/=k;
                    avsumqm/=k;
                    avsum1/=k;
                    System.out.println(coursename+" "+avsum1);
                }
                if(flag1==3)//该课程为考察课
                {
                    avsum1=avsumqm;
                    avsumqm/=k;
                    avsum1/=k;
                    System.out.println(coursename+" "+avsum1);
                }
                if(flag1==4)//该课程为实验课
                {
                    avsum1=avsumqm;
                    avsumqm/=k;
                    avsum1/=k;
                    System.out.println(coursename+" "+avsum1);
                }
            }
            avsumps=0;
            avsumqm=0;
            avsum1=0;
            flag1=0;
        }
        flag1=0;
        Collections.sort(classroomlist);//班级排序
        for(i=0;i<classroomlist.size();i++)
        {
            for(Entry<Integer, Integer> entry:cjmap.entrySet())
            {
                classnum=String.valueOf(entry.getKey()).substring(0,6);
                if(String.valueOf(classroomlist.get(i).code).equals(classnum))
                {
                    avsum+=entry.getValue();
                    flag1=1;
                }
            }
            for(j=0;j<classroomlist.get(i).list.size();j++)
            {
                student=classroomlist.get(i).list.get(j);
                for(k=0;k<chooselist.size();k++)
                {
                    choose=chooselist.get(k);
                    if(choose.student.name.equals(student.name)&&choose.student.num==student.num)
                        index++;
                }
            }
            if(index==0||flag1==0)
                System.out.println(classroomlist.get(i).code+" has no grades yet");
            else
            {
                avsum/=index;
                System.out.println(classroomlist.get(i).code+" "+avsum);
            }
            flag1=0;
            avsum=0;
            index=0;
        }
    }
}

程序的主要逻辑如下:

  1. 通过Scanner类读取用户输入的数据,包括课程信息和成绩信息。

  2. 根据输入的数据,将课程信息存储在HashMap cmap(课程名字->课程对象)中,将学生信息存储在HashMap smap(学号->学生对象)中,将选课信息存储在ArrayList chooselist中,将班级信息存储在ArrayList classroomlist中。

  3. 对输入的数据进行逐行解析,根据不同的输入内容执行相应的操作,包括添加课程信息和添加课程成绩信息。

  4. 在添加课程成绩信息时,会根据学生的班级和课程信息进行匹配,并根据成绩的考核方式计算成绩。

  5. 将学生的平均成绩和班级的平均成绩进行计算和输出。

代码中还包含了一些辅助类,如Course(课程类)、Student(学生类)、Choose(选课类)、Classroom(班级类)、Examgrade(考试成绩类)、Inspectgrade(考察成绩类)、Experiment(实验成绩类)。

 

7-2 课程成绩统计程序-3
分数 64
作者 蔡轲
单位 南昌航空大学

课程成绩统计程序-3在第二次的基础上修改了计算总成绩的方式,

要求:修改类结构,将成绩类的继承关系改为组合关系,成绩信息由课程成绩类和分项成绩类组成,课程成绩类组合分项成绩类,分项成绩类由成绩分值和权重两个属性构成。

完成课程成绩统计程序-2、3两次程序后,比较继承和组合关系的区别。思考一下哪一种关系运用上更灵活,更能够适应变更。

题目最后的参考类图未做修改,大家根据要求自行调整,以下内容加粗字体显示的内容为本次新增的内容。

某高校课程从性质上分为:必修课、选修课、实验课,从考核方式上分为:考试、考察、实验。

考试的总成绩由平时成绩、期末成绩分别乘以权重值得出,比如平时成绩权重0.3,期末成绩权重0.7,总成绩=平时成绩*0.3+期末成绩*0.7。

考察的总成绩直接等于期末成绩

实验的总成绩等于课程每次实验成绩乘以权重后累加而得。

课程权重值在录入课程信息时输入。(注意:所有分项成绩的权重之和应当等于1)

必修课的考核方式必须为考试,选修课可以选择考试、考察任一考核方式。实验课的成绩必须为实验。

1、输入:

包括课程、课程成绩两类信息。

课程信息包括:课程名称、课程性质、考核方式、分项成绩数量、每个分项成绩的权重。

考试课信息格式:课程名称+英文空格+课程性质+英文空格+考核方式+英文空格+平时成绩的权重+英文空格+期末成绩的权重

考察课信息格式:课程名称+英文空格+课程性质+英文空格+考核方式

实验课程信息格式:课程名称+英文空格+课程性质+英文空格+考核方式+英文空格+分项成绩数量n+英文空格+分项成绩1的权重+英文空格+。。。+英文空格+分项成绩n的权重

实验次数至少4次,不超过9次

课程性质输入项:必修、选修、实验

考核方式输入选项:考试、考察、实验

考试/考查课程成绩信息包括:学号、姓名、课程名称、平时成绩(可选)、期末成绩

考试/考查课程成绩信息格式:学号+英文空格+姓名+英文空格+课程名称+英文空格+平时成绩+英文空格+期末成绩

实验课程成绩信息包括:学号、姓名、课程名称、每次成绩{在系列-2的基础上去掉了(实验次数),实验次数要和实验课程信息中输入的分项成绩数量保持一致}

实验课程信息格式:学号+英文空格+姓名+英文空格+课程名称+英文空格+第一次实验成绩+...+英文空格+最后一次实验成绩

以上信息的相关约束:

1)成绩是整数,不包含小数部分,成绩的取值范围是【0,100】

2)学号由8位数字组成

3)姓名不超过10个字符

4)课程名称不超过10个字符

5)不特别输入班级信息,班级号是学号的前6位。

2、输出:

输出包含三个部分,包括学生所有课程总成绩的平均分、单门课程总成绩平均分、班级所有课程总成绩平均分。

为避免四舍五入误差,

计算单个成绩时,分项成绩乘以权重后要保留小数位,计算总成绩时,累加所有分项成绩的权重分以后,再去掉小数位。

学生总成绩/整个班/课程平均分的计算方法为累加所有符合条件的单个成绩,最后除以总数。

1)学生课程总成绩平均分按学号由低到高排序输出

格式:学号+英文空格+姓名+英文空格+总成绩平均分

如果某个学生没有任何成绩信息,输出:学号+英文空格+姓名+英文空格+"did not take any exams"

2)单门课程成绩按课程名称的字符顺序输出

课程成绩输出格式:课程名称+英文空格+总成绩平均分

如果某门课程没有任何成绩信息,输出:课程名称+英文空格+"has no grades yet"

3)班级所有课程总成绩平均分按班级由低到高排序输出

格式:班级号+英文空格+总成绩平均分

如果某个班级没有任何成绩信息,输出:班级名称+英文空格+ "has no grades yet"

异常情况:

1)如果解析某个成绩信息时,课程名称不在已输入的课程列表中,输出:学号+英文空格+姓名+英文空格+":"+课程名称+英文空格+"does not exist"

2)如果解析某个成绩信息时,输入的成绩数量和课程的考核方式不匹配,输出:学号+英文空格+姓名+英文空格+": access mode mismatch"

以上两种情况如果同时出现,按第一种情况输出结果。

3)如果解析某个课程信息时,输入的课程性质和课程的考核方式不匹配,输出:课程名称+" : course type & access mode mismatch"

4)格式错误以及其他信息异常如成绩超出范围等,均按格式错误处理,输出"wrong format"

5)若出现重复的课程/成绩信息,只保留第一个课程信息,忽略后面输入的。

6)如果解析实验课程信息时,输入的分项成绩数量值和分项成绩权重的个数不匹配,输出:课程名称+" : number of scores does not match"

7)如果解析考试课、实验课时,分项成绩权重值的总和不等于1,输出:课程名称+" : weight value error"

信息约束:

1)成绩平均分只取整数部分,小数部分丢弃

参考类图(与第一次相同,其余内容自行补充):

fdada4ca193119ee30531ab82ffebbfa_9dbcf4e8-1627-4cf6-8764-cccf44947e2a.png

输入样例1:

在这里给出一组输入。例如:

java 实验 实验 4 0.2 0.3 0.2 0.3
end

输出样例1:

在这里给出相应的输出。例如:

java has no grades yet

输入样例2:

在这里给出一组输入。例如:

java 实验 实验 4 0.2 0.3 0.2
end

输出样例2:

在这里给出相应的输出。例如:

java : number of scores does not match

输入样例3:

在这里给出一组输入。例如:

java 实验 实验 4 0.2 0.3 0.2 0.1
end

输出样例3:

在这里给出相应的输出。例如:

java : weight value error

输入样例4:

在这里给出一组输入。例如:

java 实验 实验 4 0.2 0.3 0.2 0.3
20201116 张三 java 70 80 90 100
end

输出样例4:

在这里给出相应的输出。例如:

20201116 张三 86
java 86
202011 86

输入样例5:

在这里给出一组输入。例如:

java 实验 实验 4 0.2 0.3 0.2 0.3
20201116 张三 java 70 80 90 100 80
end

输出样例5:

在这里给出相应的输出。例如:

20201116 张三 : access mode mismatch
20201116 张三 did not take any exams
java has no grades yet
202011 has no grades yet



import java.util.*;
import java.text.Collator;
public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        Course[] course = new Course[100];
        Student[] student = new Student[100];
        Cls[] cls = new Cls[100];
        int courseCount = 0;                            //课程数量
        int studentCount = 0;                           //学生数量
        int classCount = 0;                             //班级数量
        /*获取输入*/
        StringBuilder sb = new StringBuilder();
        HashSet<String> set = new HashSet<>();
        while (sc.hasNextLine()) {
            String s = sc.nextLine();
            if (s.equals("end")) {
                break;
            }
            if (set.add(s)) { // 添加成功则说明是第一次出现的行,才将其加入 StringBuilder 中
                sb.append(s).append("\n");
            }
        }
        String str = sb.toString();
        String[] lines = str.split("\n");
        for(String line : lines)
        {
            String[] words = line.split(" ");
            boolean repeat = false;
            if(InputMatching.matchingInput(line)==1)
            {
                for(int i=0;i<courseCount;i++){
                    if(words[0].equals(course[i].getName())){
                        repeat = true;
                        break;
                    }
                }if(repeat) continue;
                course[courseCount] = new Course();
                course[courseCount].setName(words[0]);
                /*选修与必修*/
                switch (words[1]) {
                    case "必修":
                        course[courseCount].required = true;
                        break;
                    case "选修":
                        course[courseCount].required = false;
                        break;
                    case "实验":
                        course[classCount].pre = true;
                        break;
                }
                /*考试与考察与实验*/
                boolean pra = false;
                if(words[1].equals("实验")){
                    pra = true;
                    if(words[2].equals("实验")){
                        course[courseCount].pre = true;
                    }else {
                        course[courseCount].format = false;
                        System.out.println(words[0]+" : course type & access mode mismatch");
                        course[courseCount].setName(null);
                    }
                }
                if(course[courseCount].required&&!pra) {
                    course[courseCount].test = true;
                    if(words[2].equals("考察")||words[2].equals("实验")){
                        course[courseCount].format = false;
                        System.out.println(words[0]+" : course type & access mode mismatch");
                        course[courseCount].setName(null);
                    }
                }else if(!pra){
                    switch (words[2]) {
                        case "考试":
                            course[courseCount].test = true;
                            break;
                        case "考察":
                            course[courseCount].test = false;
                            break;
                        case "实验":
                            course[courseCount].format = false;
                            System.out.println(words[0] + " : course type & access mode mismatch");
                            course[courseCount].setName(null);
                            break;
                    }
                }

                courseCount++;
            }
            else if(InputMatching.matchingInput(line)==2||words.length>=5)
            {
                boolean mistake = false;
                if(Integer.parseInt(words[3])>100){
                    System.out.println("wrong format");
                    continue;
                }
                if(words.length>5){
                    if(Integer.parseInt(words[3])<4||Integer.parseInt(words[3])>9){
                        System.out.println("wrong format");
                        continue;
                    }try {
                        for (int i = 0; i < Integer.parseInt(words[3]); i++) {
                            if (Integer.parseInt(words[i + 4]) > 100 || Integer.parseInt(words[i + 4]) < 0) {
                                mistake = true;
                            }
                        }
                    }catch (ArrayIndexOutOfBoundsException ignored){

                    }
                    if(mistake) {
                        System.out.println("wrong format");
                        continue;
                    }
                }
                int courseIndex = 0;
                int classIndex = 0;
                int studentIndex = 0;
                boolean exist = false;
                boolean createStudent = true;
                boolean createClass = true;
                String classID = words[0].substring(0,6);
                /*获取课程下标*/
                for(int i=0;i<courseCount;i++){
                    if(words[2].equals(course[i].getName())){
                        courseIndex = i;
                        exist = true;
                        break;
                    }
                }
                /*不存在课程*/
                if(!exist){
                    System.out.println(words[2]+" does not exist");
                }
                /*已存在该班*/
                for(int i=0;i<classCount;i++){
                    if(classID.equals(cls[i].getID())){
                        createClass = false;
                        classIndex = i;
                        break;
                    }
                }
                if(createClass){
                    classIndex = classCount;
                    cls[classCount] = new Cls();
                    cls[classCount].setID(classID);
                    classCount++;
                }
                /*已存在该学生*/
                for(int i=0;i<studentCount;i++){
                    if(words[0].equals(student[i].getID())){
                        createStudent = false;
                        studentIndex = i;
                        break;
                    }
                }
                if(createStudent) {
                    student[studentCount] = new Student();
                    student[studentCount].setID(words[0]);
                    student[studentCount].setName(words[1]);
                    if(words.length==4){
                        if(course[courseIndex].pre){
                            System.out.println(words[0]+" "+words[1]+" : access mode mismatch");
                            continue;
                        }
                        if(course[courseIndex].test){
                            if(exist)
                                System.out.println(words[0]+" "+words[1]+" : access mode mismatch");
                            student[studentCount].format = false;
                        }else{
                            student[studentCount].setScore(Integer.parseInt(words[3]));
                            course[courseIndex].setTestScore(Integer.parseInt(words[3]));
                            course[courseIndex].setScore(Integer.parseInt(words[3]));
                            cls[classIndex].setScore(Integer.parseInt(words[3]));
                        }
                    }else if(words.length==5){
                        if(course[courseIndex].pre){
                            System.out.println(words[0]+" "+words[1]+" : access mode mismatch");
                            continue;
                        }
                        if(!course[courseIndex].test){
                            if(exist)
                                System.out.println(words[0]+" "+words[1]+" : access mode mismatch");
                            student[studentCount].format = false;
                        }else{
                            student[studentCount].setScore(Integer.parseInt(words[3])*0.3+Integer.parseInt(words[4])*0.7);
                            cls[classIndex].setScore(Integer.parseInt(words[3])*0.3+Integer.parseInt(words[4])*0.7);
                            course[courseIndex].setTestScore(Integer.parseInt(words[4]));
                            course[courseIndex].setTimeScore(Integer.parseInt(words[3]));
                            course[courseIndex].setScore(Integer.parseInt(words[3])*0.3+Integer.parseInt(words[4])*0.7);
                        }
                    }else if(words.length<8){
                        System.out.println(words[0]+" "+words[1]+" : access mode mismatch");
                    }else {
                        double theWhole = 0;
                        double theAverage;
                        int thePre = Integer.parseInt(words[3]);
                        if(words.length-4 != thePre){
                            System.out.println(words[0]+" "+words[1]+" : access mode mismatch");
                            continue;
                        }
                        for(int i = 0;i<thePre;i++){
                            theWhole += Integer.parseInt(words[i+4]);
                        }
                        theAverage = theWhole / thePre;
                        student[studentCount].setScore(theAverage);
                        course[courseIndex].setScore(theAverage);
                        cls[classIndex].setScore(theAverage);
                    }
                    studentCount++;
                }else {
                    if(words.length==4){
                        if(course[courseIndex].test){
                            if(exist)
                                System.out.println(words[0]+" "+words[1]+" : access mode mismatch");
                            student[studentIndex].format = false;
                        }else{
                            student[studentIndex].setScore(Integer.parseInt(words[3]));
                            course[courseIndex].setTestScore(Integer.parseInt(words[3]));
                            course[courseIndex].setScore(Integer.parseInt(words[3]));
                            cls[classIndex].setScore(Integer.parseInt(words[3]));
                        }
                    }else if(words.length==5){
                        if(!course[courseIndex].test){
                            if(exist)
                                System.out.println(words[0]+" "+words[1]+" : access mode mismatch");
                            student[studentIndex].format = false;
                        }else{
                            student[studentIndex].setScore(Integer.parseInt(words[3])*0.3+Integer.parseInt(words[4])*0.7);
                            cls[classIndex].setScore(Integer.parseInt(words[3])*0.3+Integer.parseInt(words[4])*0.7);
                            course[courseIndex].setTestScore(Integer.parseInt(words[4]));
                            course[courseIndex].setTimeScore(Integer.parseInt(words[3]));
                            course[courseIndex].setScore(Integer.parseInt(words[3])*0.3+Integer.parseInt(words[4])*0.7);
                        }
                    }else if(words.length<8){
                        System.out.println(words[0]+" "+words[1]+" : access mode mismatch");
                    }
                    else {
                        double theWhole = 0;
                        double theAverage;
                        int thePre = Integer.parseInt(words[3]);
                        if(words.length-4 != thePre){
                            System.out.println(words[0]+" "+words[1]+" : access mode mismatch");
                            continue;
                        }
                        for(int i = 0;i<thePre;i++){
                            theWhole += Integer.parseInt(words[i+4]);
                        }
                        theAverage = theWhole / thePre;
                        student[studentCount].setScore(theAverage);
                        course[courseIndex].setScore(theAverage);
                        cls[classIndex].setScore(theAverage);
                    }
                }
            }else System.out.println("wrong format");
        }
        List<Student> studentList = new ArrayList<>(Arrays.asList(student).subList(0, studentCount));
        List<Cls> clsList = new ArrayList<>(Arrays.asList(cls).subList(0, classCount));
        List<Course> courseList = new ArrayList<>(Arrays.asList(course).subList(0, courseCount));
        Collections.sort(studentList);
        Collections.sort(clsList);
        courseList.sort(new CourseComparator());
        for(Student students : studentList){
            if(students.getScore()==0){
                System.out.println(students.getID()+" "+students.getName()+ " did not take any exams");
            }
            else{
                System.out.println(students.getID()+" "+students.getName()+" "+ students.lastScore());
            }
        }

        for(Course course1 : courseList){
            if(course1.getScore()==0&&course1.format){
                System.out.println(course1.getName()+" has no grades yet");
            }else{
                if(course1.pre&&course1.format){
                    System.out.println(course1.getName()+" "+ (int)course1.getScore()/course1.getScoreCount());
                }
                else if(course1.test&&course1.format){
                    System.out.println(course1.getName()+" "+(int)course1.getTimeScore()/course1.getScoreCount()+" "+
                            (int)course1.getTestScore()/course1.getScoreCount()+" "+(int)course1.getScore()/course1.getScoreCount());
                }else if(course1.format){
                    System.out.println(course1.getName()+" "+
                            (int)course1.getTestScore()/course1.getScoreCount()+" "+(int)course1.getScore()/course1.getScoreCount());
                }
            }
        }
        for(Cls cls1 : clsList){
            if(cls1.getScore()==0){
                System.out.println(cls1.getID()+" has no grades yet");
            }else{
                System.out.println(cls1.getID()+" "+(int)cls1.getScore()/cls1.getScoreCount());
            }
        }
    }
}
class CourseComparator implements Comparator<Course> {
    @Override
    public int compare(Course c1, Course c2) {
        Collator collator = Collator.getInstance(Locale.CHINA);
        return collator.compare(c1.getName(), c2.getName());
    }
}
class Course implements Comparable<Course>{
    private String name;
    private double timeScore=0;
    private double testScore=0;
    private double score=0;
    private int scoreCount=0;
    public boolean test;
    public boolean required;
    public boolean format = true;
    public boolean pre;

    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }

    public double getTimeScore() {
        return timeScore;
    }

    public void setTimeScore(double timeScore) {
        this.timeScore += timeScore;
    }

    public double getTestScore() {
        return testScore;
    }

    public void setTestScore(double testScore) {
        this.testScore += testScore;
    }

    public double getScore() {
        return score;
    }

    public void setScore(double score) {
        this.score += score;
        this.scoreCount++;
    }

    public int getScoreCount() {
        return scoreCount;
    }
    // 实现Comparable接口中的compareTo方法,按照课程名称字符顺序排列
    @Override
    public int compareTo(Course other) {
        return this.name.compareTo(other.getName());
    }
}
class Student implements Comparable<Student>{
    private String ID;
    private String name;
    private double score;
    private int scoreCount=0;
    public boolean format = true;

    public String getID() {
        return ID;
    }

    public void setID(String ID) {
        this.ID = ID;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public double getScore() {
        return score;
    }

    public void setScore(double score) {
        this.score += score;
        this.scoreCount++;
    }
    public int lastScore(){
        return (int)score/scoreCount;
    }
    // 定义比较规则:按照id升序排列
    @Override
    public int compareTo(Student o) {
        return Integer.compare(Integer.parseInt(this.ID), Integer.parseInt(o.ID));
    }
}
class Cls implements Comparable<Cls>{
    private String ID;
    private double score;
    private int scoreCount=0;
    public void setID(String ID){
        this.ID = ID;
    }
    public String getID(){
        return ID;
    }

    public void setScore(double score) {
        this.score += score;
        this.scoreCount++;
    }
    public double getScore(){
        return score;
    }

    public int getScoreCount() {
        return scoreCount;
    }
    // 定义比较规则:按照id升序排列
    @Override
    public int compareTo(Cls o) {
        return Integer.compare(Integer.parseInt(this.ID), Integer.parseInt(o.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 = "(考试|考察|实验)";

    static String courseInput = courseNameMatching + " " + courseTypeMatching + " " + checkCourseTypeMatching;
    /*courseInput用于定义课程信息模式(正则表达式)*/
    static String scoreInput = 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 (matchingScore(s)) {
            return 2;
        }
        return 0;
    }
    private static boolean matchingCourse(String s) {
        return s.matches(courseInput);
    }
    private static boolean matchingScore(String s) {
        return s.matches(scoreInput)||s.matches(scoreInput2);
    }
}

 

题涉及的Java知识点包括输入输出、字符串处理、数据结构和算法、异常处理等。相比上两个版本,本题修改了成绩类的继承关系为组合关系,并增加了分项成绩类来进行成绩的计算。

题量适中,涉及多个输入输出项和计算要求,同时还有对继承和组合关系的理解和比较。

难度中等,需要综合运用Java的输入输出、字符串处理、数据结构和算法、异常处理等知识点来解决问题。此外,还需要理解并比较继承和组合关系的区别,思考哪种关系更适应变更,并相应地修改代码。

通过修改类结构、采用组合关系的方式,可以使代码更加灵活,模块化程度更高。通过使用分项成绩类,可以根据权重计算各个分项的成绩,并在计算总成绩时进行累加。这样可以更容易适应需求的变更,例如增加新的分项成绩或修改权重,而无需修改大量的代码。

因此,通过使用组合关系来构建成绩类,代码更具灵活性和可维护性,能够更好地适应变更。对于这些知识点的熟练掌握和灵活运用,将有助于解决该题目,并能更好地理解和应用继承和组合关系。

在解决课程成绩统计程序-3的问题时,可以进一步考虑以下方面:

1. 组合关系的优势:与继承关系相比,组合关系更具灵活性和可扩展性。通过将分项成绩类与课程成绩类进行组合,可以轻松地处理单门课程的多个成绩分项,并根据权重来计算总成绩。这种设计模式符合“组合优于继承”的原则,能够更好地适应需求变更和扩展。

2. 可配置的分项成绩权重:由于新增了分项成绩类,在录入课程信息时,需要输入每个分项成绩的权重。这样的设计允许灵活地对分项成绩进行权重分配,可以根据实际情况进行设置。例如,对于某门课程,可以根据教学目标和考核要求来确定各个分项成绩的比重,从而更准确地计算总成绩。

3. 总成绩计算的实现:在计算总成绩时,通过分项成绩类的权重和成绩来计算各个分项的得分,然后将得分相加得到总成绩。这种分项成绩和总成绩的计算方式更加灵活,可以适应不同课程的考核方式和评分标准。

4. 异常处理的完善:需要对异常情况进行处理。例如,检查输入的分项成绩数量和权重的数量是否匹配,检查分项成绩权重的总和是否为1,以及对其他格式错误和越界的输入进行处理。通过合理的异常处理机制,可以更好地保证程序的稳定性和可靠性。

总的来说,课程成绩统计程序-3在前两个版本的基础上,通过改变成绩类的继承关系为组合关系,并引入了分项成绩类来处理分项成绩和计算总成绩。通过这种设计方式,代码变得更灵活、可扩展性更强,能够更好地适应需求的变更。对于这些知识点的理解和灵活运用,将有助于解决该问题,并在实际应用中具备更好的适应性和可维护性。

 

期末考试

7-1 立体图形问题
分数 10
作者 段喜龙
单位 南昌航空大学

编程求得正方体和正三棱锥的表面积和体积,要求必须体现扩展性(继承)和多态性。

类结构如下图所示(参考):

image.png
试编程完成如上类设计,主方法源码如下(可直接拷贝使用):

 
public static void main(String[] args) {
    // TODO Auto-generated method stub
    Scanner input = new Scanner(System.in);
    double side = input.nextDouble();
        
    display(new Cube(side));
    display(new RegularPyramid(side));
}

其中,display(Solid solid)方法为定义在Main类中的静态方法,作用为体现程序的多态性。

注:正三棱锥的体积计算公式为底面积*高/3。

 

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        double side = input.nextDouble();
        
        display(new Cube(side));
        display(new Tetrahedron(side));
    }
    
    public static void display(Solid solid) {
        System.out.println(String.format("%.2f", solid.getSurfaceArea()));
        System.out.println(String.format("%.2f", solid.getVolume()));
    }
}

abstract class Solid {
    public abstract double getSurfaceArea();
    public abstract double getVolume();
}

class Cube extends Solid {
    private double side;
    
    public Cube(double side) {
        this.side = side;
    }
    
    public double getSurfaceArea() {
        return 6 * side * side;
    }
    
    public double getVolume() {
        return side * side * side;
    }
}

class Tetrahedron extends Solid {
    private double side;
    
    public Tetrahedron(double side) {
        this.side = side;
    }
    
    public double getSurfaceArea() {
        return Math.sqrt(3) * side * side;
    }
    
    public double getVolume() {
        return Math.sqrt(2) / 12 * side * side * side;
    }
}

 

 

  1. 首先,通过Scanner类从用户输入中获取一个double类型的值,表示立方体和四面体的边长。

  2. 然后,调用display方法,并传入一个Cube对象和一个Tetrahedron对象。这个方法用于输出立方体和四面体的表面积和体积。

  3. 在display方法中,通过调用传入对象的getSurfaceArea方法和getVolume方法,分别获取其表面积和体积,并用String.format("%.2f", value)来格式化输出结果,保留两位小数位。

  4. 在Solid类中,定义了一个抽象类,包含两个抽象方法getSurfaceArea和getVolume,以供Cube和Tetrahedron类继承并实现。

  5. 在Cube和Tetrahedron类中,分别重写了getSurfaceArea和getVolume方法,根据立方体和四面体的特性,计算并返回了它们的表面积和体积。

总体而言,该程序通过抽象类和继承实现了多态性,可以方便地计算立方体和四面体的表面积和体积。

 

7-2 魔方问题
分数 20
作者 段喜龙
单位 南昌航空大学

问题描述:本问题中的魔方有两种,一种是正方体魔方,一种是正三棱锥魔方,其中,正方体或正三棱锥魔方是由单元正方体或正三棱锥组成,单元正方体或正三棱锥的个数由阶数(即层数)决定,即魔方边长=阶数*单元边长。魔方如下图所示:

image.png


利用“立体图形”问题源码,实现如下功能:

魔方有三个属性:颜色,阶数,类型(正方体魔方、正三棱锥魔方),程序要求输出魔方的颜色、表面积和体积。参考设计类图如下所示

image.png

 

  1. 首先,通过Scanner类从用户输入中获取多个值,包括颜色、层数和边长等信息。

  2. 然后,根据输入的信息,创建SquareCube和RegularPyramidCube对象,这两个对象都是RubikCube类的子类。

  3. 在RubikCube类中,包含了颜色、层数和一个Solid对象的实例变量。通过调用Solid对象的方法,计算魔方立方体的表面积和体积。

  4. 在Solid类中,定义了一个抽象类,包含两个抽象方法getSurfaceArea和getVolume,以供Cube和RegularPyramid类继承并实现。

  5. 在Cube和RegularPyramid类中,分别重写了getSurfaceArea和getVolume方法,根据立方体和正四面体的特性,计算并返回了它们的表面积和体积。

  6. 在Main类中的display方法中,通过调用RubikCube对象的getColor、getSurfaceArea和getVolume方法,分别输出魔方立方体的颜色、表面积和体积。

总体而言,该程序通过抽象类、继承和多态性,实现了对魔方立方体的表面积和体积的计算。可以根据用户的输入创建不同类型的魔方立方体对象,并输出其属性和计算结果。

心得总结:

在学习了四个月的Java之后,我对这门语言有了更深入的理解和体会。Java不仅仅是一门编程语言,更是一种编程思想和方法。从最初的懵懂不解到现在逐渐领悟其精髓,我不断地学习、思考,并付诸实践。在今后的学习过程中,我会更加努力地去学习,做到真正的学以致用,不断提高自己的编程能力。

在今后的学习过程中,我会继续努力提高自己的编程能力,通过学习和实践来不断巩固和拓展Java的知识体系。同时,我还会积极参与各种项目实践,以便将所学知识应用于实际工作中。