Day42--练习--操作题1
题目:
以下是一道Java操作练习题,你可以尝试进行编写代码来解决哦:
题目要求:
创建一个名为Student
的类,这个类有以下几个私有属性:
name
:表示学生的姓名,类型为String
。age
:表示学生的年龄,类型为int
。scores
:表示学生的各科成绩,类型为int
数组,可以用来存储多门课程的成绩。
该类需要具备以下方法:
-
构造方法:
- 创建一个带有三个参数的构造方法,参数分别对应姓名、年龄、成绩数组(按照顺序传入),在构造方法中完成对类中对应私有属性的初始化赋值。
-
获取平均成绩的方法:
- 创建一个名为
getAverageScore
的方法,该方法返回值类型为double
,用于计算并返回这个学生的各科成绩的平均值(也就是成绩数组中所有元素的平均值)。
- 创建一个名为
-
判断是否成年的方法:
- 创建一个名为
isAdult
的方法,该方法返回值类型为boolean
,用于判断该学生的年龄是否大于等于18岁,如果是则返回true
,否则返回false
。
- 创建一个名为
-
展示学生信息的方法:
- 创建一个名为
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