首页 > 其他分享 >Day42--练习--操作题1

Day42--练习--操作题1

时间:2024-12-07 12:33:49浏览次数:6  
标签:-- double 操作题 int student scores age 方法 Day42

Day42--练习--操作题1

题目:

以下是一道Java操作练习题,你可以尝试进行编写代码来解决哦:

题目要求

创建一个名为Student的类,这个类有以下几个私有属性:

  • name:表示学生的姓名,类型为String
  • age:表示学生的年龄,类型为int
  • scores:表示学生的各科成绩,类型为int数组,可以用来存储多门课程的成绩。

该类需要具备以下方法:

  1. 构造方法

    • 创建一个带有三个参数的构造方法,参数分别对应姓名、年龄、成绩数组(按照顺序传入),在构造方法中完成对类中对应私有属性的初始化赋值。
  2. 获取平均成绩的方法

    • 创建一个名为getAverageScore的方法,该方法返回值类型为double,用于计算并返回这个学生的各科成绩的平均值(也就是成绩数组中所有元素的平均值)。
  3. 判断是否成年的方法

    • 创建一个名为isAdult的方法,该方法返回值类型为boolean,用于判断该学生的年龄是否大于等于18岁,如果是则返回true,否则返回false
  4. 展示学生信息的方法

    • 创建一个名为showStudentInfo的方法,此方法无返回值,在方法中按照如下格式输出学生的信息:
      姓名:[学生姓名],年龄:[学生年龄],平均成绩:[平均成绩数值](其中[学生姓名][学生年龄][平均成绩数值]要替换为实际对应的值)。

main方法中(可以创建一个包含main方法的测试类,或者就在Student类里创建main方法):

  • 创建一个Student类的对象,传入姓名为“张三”,年龄为20,成绩数组为{85, 90, 78}
  • 调用这个对象的getAverageScore方法获取平均成绩,并输出平均成绩(输出语句格式自行设计)。
  • 调用这个对象的isAdult方法判断是否成年,并输出判断结果(输出语句格式自行设计)。
  • 调用这个对象的showStudentInfo方法展示学生的完整信息。

你可以尝试根据这些要求进行代码编写呀,希望对你巩固Java基础语法有所帮助呢。如果之后想要核对答案或者有疑问,可以再来问我哦。

我写的答案:

package com.liu.exercise;

public class Student {
    private String name;
    private int age;
    private int[] scores;
    public double getAverageScore(int[] scores){
        int sum=0;
        int average=0;
        for (int i : scores) {
            sum+=i;
        }
        average=sum/scores.length;
        return average;
    }

    public boolean isAdult(int age){
        if(age>18){
            System.out.println("true");
        }

    }

    public static void main(String[] args) {
        Student student = new Student();
        student.name="张三";
        student.age=20;
        student.scores= new int[]{85, 90, 78};
        System.out.println(student.getAverageScore(student.scores));
        System.out.println(student.isAdult(student.age));

    }
}

解析:

以下是对你这段代码的评价以及指出存在的问题和相应解析:

1. getAverageScore方法

  • 问题
    方法的返回值类型定义不太准确。目前方法中计算平均成绩时,是使用int类型的变量average来存储计算结果,然后返回这个int类型的结果,但实际平均成绩可能会出现小数情况(比如成绩总和不能被课程数量整除时),而方法定义的返回值类型是double,这样可能导致精度丢失。

  • 解析
    按照需求应该准确地返回一个double类型的平均成绩,所以在计算平均成绩时,应该将总和转换为double类型再进行除法运算,以确保能得到正确的带有小数的平均成绩值。修改后的代码如下:

public double getAverageScore(int[] scores) {
    int sum = 0;
    for (int i : scores) {
        sum += i;
    }
    return (double) sum / scores.length;
}

通过将sum强制转换为double类型后再除以成绩数组的长度,就能保证返回符合要求的double类型的平均成绩了。

2. isAdult方法

  • 问题
    方法的返回值类型定义为boolean,表示应该返回一个布尔值(true或者false)来表示是否成年,但在方法体中,当前是使用System.out.println("true");直接输出了字符串“true”,而没有按照返回值要求返回相应的布尔值,这样调用这个方法获取的返回结果就不符合预期了,并且方法内直接输出内容也不符合方法设计的初衷(方法一般是返回结果给调用者去决定如何使用这个结果进行后续操作)。

  • 解析
    应该将方法修改为按照正确的逻辑返回boolean值,代码可修改为:

public boolean isAdult(int age) {
    return age >= 18;
}

这样当调用isAdult方法时,就会根据传入的年龄判断是否大于等于18岁,然后准确地返回对应的布尔值,方便在main方法或者其他调用处根据返回的布尔值进行相应的逻辑处理,比如进行条件判断等。

3. main方法中的代码逻辑

  • 问题
    main方法中调用isAdult方法时,又重复传入了student.age作为参数,其实是没必要的,因为isAdult方法本身就是Student类中的实例方法,它可以直接访问类中的age实例变量,不需要再次传入这个值。

  • 解析
    可以直接调用student.isAdult()就可以了,方法内部会自动使用对象自身的age实例变量来进行是否成年的判断。修改后的main方法整体代码如下:

public static void main(String[] args) {
    Student student = new Student();
    student.name = "张三";
    student.age = 20;
    student.scores = new int[]{85, 90, 78};
    System.out.println(student.getAverageScore(student.scores));
    System.out.println(student.isAdult());
    student.showStudentInfo();
}

另外,还缺少按照题目要求实现的showStudentInfo方法,你需要根据题目给定的格式去补充这个方法来完整地展示学生信息哦,例如:

public void showStudentInfo() {
    double averageScore = getAverageScore(scores);
    System.out.println("姓名:" + name + ",年龄:" + age + ",平均成绩:" + averageScore);
}

总体来说,你已经对题目的基本结构和要求有了一定理解,只是在方法的返回值处理以及部分调用逻辑上存在一些小的偏差,按照上述建议修改后,代码就能更准确地满足题目要求啦。

正确的代码

package com.liu.exercise;

public class Student {
    private String name;
    private int age;
    private int[] scores;
    public double getAverageScore(int[] scores){
        int sum=0;
        double average=0;
        for (int i : scores) {
            sum+=i;
        }
        average=(double)sum/scores.length;
        return average;
    }

    public boolean isAdult(){
    return age>=18;
    }

    public void showStudentInfo(){
        System.out.println("姓名:"+name+",年龄:"+age+",平均年龄:"+getAverageScore(scores));
    }

    public static void main(String[] args) {
        Student student = new Student();
        student.name="张三";
        student.age=20;
        student.scores= new int[]{85, 90, 78};
        System.out.println(student.getAverageScore(student.scores));
        System.out.println(student.isAdult());
        student.showStudentInfo();

    }
}

标签:--,double,操作题,int,student,scores,age,方法,Day42
From: https://www.cnblogs.com/xiaokunzhong/p/18591995

相关文章

  • Transfomer教程
    PipelinePipeline工作原理将文本预处理为模型可以理解的格式;将预处理好的文本送入模型;对模型的预测值进行后处理,输出人类可以理解的格式。文本预处理将输入切分为词语、子词或者符号(例如标点符号),统称为 tokens;根据模型的词表将每个token映射到对应的token编号(就是......
  • 【51编程经验笔记】第二节:鸿哥的三区一线理论 & delay()延时实现LED灯的闪烁
    第二节:delay()延时实现LED灯的闪烁。开场白:  上一节鸿哥列出了初学者七大误区,到底什么才是初学者关注的核心?那就是裸机奔跑的程序结构。一个好的程序结构,本身就是一个微型的多任务操作系统。鸿哥教给大家的就是如何编写这个简单的操作系统。在main函数循环中用switch语句实现......
  • 2024年顶级小型语言模型前15名
    本文,我们将深入了解2024年备受瞩目的十五款小型语言模型(SLMs),它们分别是Llama3.18B、Gemma2、Qwen2、MistralNemo、Phi-3.5等。这些SLMs以其精巧的体积和高效率著称,它们不需要依赖庞大的服务器资源,这与它们的大型语言模型(LLMs)对手形成了鲜明对比。它们为速度和实时性能而生......
  • 20222406 2024-2025-2 《网络与系统攻防技术》实验八实验报告
    202224062024-2025-2《网络与系统攻防技术》实验八实验报告1.实验内容本次实验涵盖Web前端HTML(安装启停Apache、理解运用HTML表单及GET/POST方法)、Web前端JavaScript(理解功能与DOM,编写验证规则及进行注入攻击)、Web后端MySQL基础(安装启动、建库建表等操作)、Web后端编写PHP网页......
  • 【网络编程】套接字基础
    Windows用户态的网络编程常见的应用主要基于套接字API。套接字API是Windows提供的一组网络编程接口。通过它,开发人员既可以在传输层之上进行网络编程,也可以跨越传输层直接对网络层进行开发。套接字API已经是用户态网络编程必须要掌握的内容。套接字编程可以分为TCP......
  • 使用QMediaPlayer播放音频
    测试扬声器的实现主要播放设备:我们使用的是QMediaPlayer来实现播放音频。实现步骤使用QMediaDevices::audioOutputs()方法来获取电脑上的所有音频输出设备。并存放到QList<QAudioDevice>outputDevices中;默认使用系统默认的输出即耳机,下标为0的outputDevices中;我们初始化的输......
  • NOIP 2024 游记
    前情提要:NOIP前一天连喝了三杯咖啡,手一直在抖。考点和CSP2022以及CSP2024一样在七中高新。发现键盘无论怎样拉都拉不到桌子上,于是只能强行把绑键盘线的东西拆开了,然后就可以在桌子上敲键盘了。发现在相邻机位中间设了挡板,原因未知。不知道为什么,和CSP一样起初一直打不......
  • 华为OD E卷(200分)02-模拟目录管理
    题目描述        实现一个模拟目录管理功能的软件,输入一个命令序列,输出最后一条命令运行结果。        支持命令:创建目录命令:mkdir目录名称,如mkdirabc为在当前目录创建abc目录,如果已存在同名目录则不执行任何操作。此命令无输出。进入目录命令:cd目......
  • 实验5
    任务1.1源代码#include<stdio.h>#defineN5voidinput(intx[],intn);voidoutput(intx[],intn);voidfind_min_max(intx[],intn,int*pmin,int*pmax);intmain(){inta[N];intmin,max;printf("录入%d个数据:\n",N);input(a,N);printf("......
  • MATLAB 在制冷循环建模中的应用:原理、方法与案例解析 
     一、制冷循环基础与MATLAB建模的意义 制冷循环是通过消耗能量将热量从低温区域转移到高温区域的过程,常见的制冷循环包括蒸气压缩式制冷循环等。在制冷系统的设计、优化与性能分析中,精确的建模至关重要。MATLAB作为一款强大的科学计算与工程仿真软件,为制冷循环建模提供......