首页 > 其他分享 >题目集1-3的总结Blog

题目集1-3的总结Blog

时间:2023-10-07 20:24:37浏览次数:35  
标签:总结 题目 String int Blog Student 成绩 public name

一、前言

在近来的三次实验中,学习到的知识自然不容多疑,但同样的,遇到的困难也一点点的呈现了。

知识点包括如下:

1、创建类,在三个题目中,里面最多使用的就是我们最近强调的使用类,类对象封装数据。

2、类型定义:类和对象、属性和方法等的定义。

题量比较大的,对于初学的我们而言要一个个去研究的话也是需要大量的时间的。难度与我而言存在一定的难度,基础的基本没问题了,但是对于进一步的内容掌握并不太稳定,相对于刚开始接触到新内容的我来说是有一定的困难。

二、设计与分析

7-1

创建学生类,包含

属性:学号(String)、姓名(String)、语文成绩(int)、数学成绩(int)、物理成绩(int)

方法:计算总分、计算平均分

输入5个学生的信息,将每个学生的信息封装在一个学生对象中。

按输入顺序依次输出5个学生的总分、平均分(精确到小数点后两位,舍去部分按四舍五入规则计入最后一位)。

 

import java.util.Scanner;
class Student {
    private String stuId;
    private String name;
    private int chinese;
    private int math;
    private int physics;
    public Student(String stuId, String name, int chinese, int math, int physics) {
        this.stuId = stuId;
        this.name = name;
        this.chinese = chinese;
        this.math = math;
        this.physics = physics;
    }
    public int getTotalScore() {
        return chinese + math + physics;
    }
    // 计算平均分
    public double getAverageScore() {
        return getTotalScore() / 3.0;
    }
    // 获取学生信息
    public String getStudentInfo() {
        return stuId + " " + name;
    }
}

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        Student[] stu = new Student[5];
        //记录学生信息
        for (int i = 0; i < 5; i++) {
            String line = scanner.nextLine();
            String[] info = line.split(" ");
            String studentId = info[0];
            String name = info[1];
            int chinese = Integer.parseInt(info[2]);
            int math = Integer.parseInt(info[3]);
            int physics = Integer.parseInt(info[4]);
            stu[i] = new Student(studentId, name, chinese, math, physics);
        }
        //分析过后的学生成绩信息
        for (int i = 0; i < 5; i++) {
            Student student = stu[i];
            //get学生信息,输出总分和三科的平均分
            String output = student.getStudentInfo() + " " + student.getTotalScore() + " " + String.format("%.2f", student.getAverageScore());
            System.out.println(output);
        }
        scanner.close();
    }
}

7-1类图如下:

 7-1复杂度如下:

 

 

 这是在7-1的第一次提交上的内容,输出样例错误

 上述为学生信息的输入函数,在源代码内因为没有对输入的学生信息进行录入和处理,空有一个输入在,所以导致后面的错误产生

改进:

 加入代码:stu[i] = new Student(studentId, name, chinese, math, physics); 在Main内部声明。

 

7-2

 

创建成绩类,包含:

属性:平时成绩(int)、期末成绩(int)

方法:计算总成绩(计算规则:平时成绩*0.4+期末成绩*0.6,保留整数部分,小数部分直接丢弃)

创建学生类,包含:

属性:学号(String)、姓名(String)、语文成绩(成绩类)、数学成绩(成绩类)、物理成绩(成绩类)

方法:计算总分、计算平均分

输入3个学生的信息,将每个学生的信息封装在一个学生对象中。

按输入顺序依次输出3个学生的总分、平均分(精确到小数点后两位,舍去部分按四舍五入规则计入最后一位)。

 7-2的类图如下:

 7-2的复杂度如下:

 

 

 

第一次没有添加对成绩的处理,添加俩个对平时成绩和期末成绩的处理函数

 之后答案成为了

import java.util.Scanner;

public class Main{
    public static void main(String[] args){
        Scanner input = new Scanner(System.in);
        int i, j;
        int arrayLength = 3;
        Student[] stu = new Student[arrayLength];
        Score[][] scores = new Score[arrayLength][arrayLength];
        for (i = 0; i < arrayLength; i++){
            stu[i] = new Student();
        }
        for (i = 0; i < arrayLength; i++){
            for (j = 0; j < arrayLength; j++){
                scores[i][j] = new Score();
            }
        }
        double a = 0, b = 0, c = 0;
        int[] n1 = new int[arrayLength];
        int[] n2 = new int[arrayLength];
        int[] n3 = new int[arrayLength];
        for (i = 0; i < arrayLength; i++){
            for (j = 0; j < arrayLength; j++){
                stu[i].ID = input.next();
                stu[i].name = input.next();
                String lesson = input.next();
                scores[i][j].regularscore = input.nextInt();
                scores[i][j].finalscore = input.nextInt();
                a += scores[i][j].finalscore();
                b += scores[i][j].regularscore;
                c += scores[i][j].finalscore;
            }
            n1[i] = (int) a;//总分
            n2[i] = (int) b;//平时分
            n3[i] = (int) c;//期末分
            a = 0;
            b= 0;
            c = 0;
        }
        for (i = 0; i < arrayLength; i++){
            System.out.printf("%s %s %d %.2f %.2f %.2f\n", stu[i].getID(), stu[i].getName(), n1[i], n2[i] / 3.0, n3[i] / 3.0, n1[i] / 3.0);
        }
    }



    public static class Score{
        private int regularscore;
        private int finalscore;
        public int finalscore(){
            return (int) (regularscore * 0.4 + finalscore * 0.6);
        }
        public Score(int regularscore, int finalscore){
            this.finalscore = finalscore;
            this.regularscore = regularscore;
        }
        public Score(){
            this(0, 0);//初始化平时成绩和期末成绩
        }
    }
    public static class Student{
        private String ID;
        private String name;
        private int chinese;
        private int math;
        private int physics;
        public Student(String ID, String name, int chinese, int math, int physics){
            this.ID = ID;
            this.name = name;
            this.chinese = chinese;
            this.math = math;
            this.physics = physics;
        }
        public Student(){
            this("", "", 0, 0, 0);//学生信息
        }
        public String getID(){
            return ID;
        }
        public String getName(){
            return name;
        }
        public int getChinese(){
            return chinese;
        }
        public int getMath(){
            return math;
        }
        public int getPhysics(){
            return physics;
        }
        public int getTotal(){
            return chinese + math + physics;
        }
        public double getAverage(){
            return getTotal() / 3.0;
        }
    }
}

 另外的不清楚问题出现在哪里,不理解“课程顺序不一致”的问题出现在哪里。

 

 T3 7-2

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

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

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

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

 第三题的参考类图如上,在这个题目上由于限制条件的约束,我没能写出来,但是大概的基本条件需要我是了解的,以及需要用到的知识点。

 本人能力有限,代码能力有待提高。

 

三、踩坑心得

7-1里面:

类的封装性:Student类使用了private访问修饰符来限制stuId、name、chinese、math、physics属性的直接访问,通过提供公共的构造方法和方法来进行操作和获取属性的值。这样做可以保证数据的安全性和一致性。
主函数main():在主函数中,通过Scanner类从标准输入读取学生的信息,并根据空格分割成学号、姓名、语文成绩、数学成绩和物理成绩。然后通过实例化Student对象来存储每个学生的信息,并将所有学生的成绩依次输出。

7-2中:

封装Score和Student类来存储每个学生的成绩和信息,并计算出每个学生的总分和平均分。
finalscore()方法:该方法用于计算最终成绩,通过将regularscore(平时成绩)和finalscore(期末成绩)按照一定比例相加来得到最终成绩。需要注意的是,在计算过程中,没有进行类型转换,因此返回值为double类型。getID()和getName()方法:这两个方法分别用于获取学生的学号和姓名。这里直接返回了Student类中定义的ID和name属性的值。
getTotal()和getAverage()方法:这两个方法分别用于计算学生的总分和平均分。需要注意的是,在计算平均分时,通过除以3.0来避免整数除法的舍入误差。
需要注意的是,在计算每个学生的总分、平均分和各科成绩时,需要定义相应的变量(如a、b、c、n1、n2、n3等),并进行正确的类型转换。此外,该程序假设只有三门科目,如果需要处理更多科目的成绩,需要相应地调整数组的大小。

 

四、主要困难以及改进意见

 

对类的定义和调用不熟练是很常见的问题,需要在实践中不断积累经验。在7-2和7-3中,我们可以通过定义一个专门处理正则表达式的类来避免大量重复的代码。这样能够提高代码的复用性和可维护性,减少出错的可能性,同时也使得代码更易于扩展和更新。
在将分割好的字符串转变为double类型的数时,确实也可以将这个部分的代码划分为一个单独的类。这个类可以封装字符串转换的过程,并在其他程序中重复使用。这样能够提高代码的可读性和可维护性,减少出错的可能性,同时也使得代码更易于应对各种需求变化。
总之,通过将相似或重复的代码划分到一个类中,可以提高代码的复用性、可读性、可维护性和可扩展性,减少出错的可能性。同时,这也符合面向对象编程的核心思想:封装、继承和多态。因此,我们在编写程序的时候,要善于分析出哪些代码可以划分到一个类中,以提高代码的品质和效率。
以下有有关的意见:
在课堂上讲解如何使用类来提高代码的复用性和可维护性,以及如何在程序中划分类;鼓励学生在编写程序时,积极思考如何将相似或重复的代码划分到一个类中,并在评分中给予额外加分;

五、总结

 

1、通过这三次的pta作业,我对Java有了很大的提升,并深刻认识到了面向对象编程的好处和重要性。在编写算法之前,我意识到了将要实现的功能细分为多个类,并清晰地定义每个类的功能任务的重要性。这样做不仅可以提高代码编写的效率,还能增强代码的可复用性,并提升自己的思维逻辑能力。

 

2、我对正则表达式有了更深入的理解,并体会到了在处理规定格式的数据时,正则表达式的实用性。它能够快速而灵活地匹配和提取需要的信息,为文本处理提供了便利。另外,正则表达式在处理规定格式的文本时具有很强的实用性,能够快速有效地匹配和提取需要的信息。

 

我建议老师在课堂上讲解一些难题的解题思路,以及一些平时不常涉及的测试点。这样的授课方式可以帮助我们节省时间,在遇到难以察觉或少见的测试点时能够更快地找到解决方案。毕竟,对于我们提升编程能力来说,过于隐蔽或不常见的测试点并没有太大的帮助。另外就是自己对于自己的期望会过于大,以至于最后都无法达到作业的标准,也达不到自己预期想要的结果,成长的也微不足道。

 

标签:总结,题目,String,int,Blog,Student,成绩,public,name
From: https://www.cnblogs.com/zjh21207329/p/17746015.html

相关文章

  • 2023-2024-1 20231403 《计算机基础与程序设计》 第二周学习总结
    作业信息这个作业属于哪个课程<班级的链接>(如2022-2023-1-计算机基础与程序设计)这个作业要求在哪里2023-2024-1计算机基础与程序设计第二周作业)这个作业的目标学习两本课本的第一章内容作业正文https://www.cnblogs.com/lsrmy/p/17747323.html教材学习内......
  • 10.07每日总结
    启动mongodb bin/mongod-fsingle/mongod.conf  需要在mongodb路径下连接   bin/mongo--host=192.168.88.151   需要在mongodb路径下关闭服务 客户端登录服务,注意,这里通过localhost登录,如果需要远程登录,必须先登录认证才行。mongo--port27017#切换到admi......
  • 21207328-吴义隆-blog1
    一、前言:三次pta题目集知识点丰富,包括了一开始如何创建Java基本形式,接着相关的命名及其使用,以及后面的知识结合。并且三次题目集的题量还算中规中矩,一开始,较为基础,题目多一点,方便学生进行学习和理解;接着进阶一点,难度提升的同时,适当减少了习题量;到最后,基本上题目以第二题的课......
  • 一周总结 10.2~10.8
    考试痛斥旅行社圆。考了几场试。场均挂分\(\ge150\),赢!具体可以见联考经验与总结做题学习了一些没有用的数学知识。学习了一些可能有用的数学知识。具体见“概率学习”和“斯特林近似证明”、“具体数学组合数习题选做”。做题\(\le15\),ds能不能似一似......
  • BLOG-1-7213
    (1)前言:主要用于完成学校的互评作业大家懂的都懂,前三次的题目集,大概囊括了最基础的输入输出、类的创建;字符串的各种操作(定位某个特点字符在字符串中的下标、提取某段需要的子字符串、对于某个字符或某个子字符串的格式判断等等)、类的交互、函数的创建与使用以及正则表达式的运用等等......
  • BLOG-1
    一.前言题目集1:这个题目集主要侧重于基本的编程知识和概念,涵盖了数据类型、运算符、条件语句、循环结构等基础内容。题目数量适中,足够帮助我巩固基本的编程技能。难度方面,大部分题目相对简单,适合编程入门的学生。但也有一些稍微复杂的问题,需要深入理解条......
  • from_rnn_2_transformer-cnblog
    从RNN到Transformer各式各样的“attention”不管是在CV领域还是NLP领域,attention实质上就是一种取权重求和的过程。使得网络focus在其应该focus的地方。根据Attention的计算区域,可以分成以下几种:1)SoftAttention,这是比较常见的Attention方式,对所有key求权重概率,每个key都有一......
  • 题目集1-3的总结
    前言:目前已经完成了一些关于Java的编程练习题,并且在逐渐掌握Java语言的基本知识和编程技巧。每个题目都涉及不同的知识点和概念,通过挑战自己解决问题,本人有效地学习和应用这些知识。对于复杂的题目集,确实需要更多的时间和精力来理解和解决。尽管如此,坚持练习,并解决各种难题会帮助......
  • 南昌航空大学题目集1~3总结
    (1)前言:第一次题目集主要让我们熟悉了Java的语法,格式,以及简单的应用方式,难度比较简单,但是相对的题量比较大,在对于当时初学Java的我们来说还是要认真对待的。第二次题目集在第一次题目集的难度上提升较大,但是还是在自学有关知识后还是可以处理的,学习了浮点数保......
  • 题目集1-3总结
    一、前言在过去的几周里,我投入了大量的时间和精力来研究和发展针对题目集1到3的解决方案。从第一次的题目集简单的逻辑以及输入、计算、输出到面向对象类的设计、类和数组的应用,学习了hashmap/hashset,封装性等等。  整体来看,这一阶段的题目涵盖了广泛的主题,包括数据结构、......