【发布时间】:2021-03-17 11:49:04
【问题描述】:
平均成绩计算
开发一个智能应用程序作为学生成绩计算器 (SGC)。
创建具有以下私有属性的学生类:
int id
字符串名称
标记(整数数组)
浮动平均值
字符等级
包括适当的 getter 和 setter 方法和构造函数。
getter 方法名称应为 getId、getName、getMarks、getAverage 和 getGrade,而 setter 方法名称应为 setId、setName、setMarks、setAverage 和 setGrade。
按 id、name 和标记的顺序编写一个公共 3 参数构造函数。
在 Student 类中编写以下方法:
public void calculateAvg()- 该方法应该计算当前学生的平均分并设置平均分。
public void findGrade()- 此方法应根据计算的平均值设置等级。如果平均值在 80 到 100 之间,则返回成绩为“O”,否则返回“A”。如果学生在任何科目中的成绩低于 50,则返回成绩为“F”。使用适当的 setter 方法为学生设置成绩。
(注意:主题数应大于零,如果不显示为“无效的主题数”并再次获取主题数,则假设主题的标记应在0-100范围内。如果不显示a消息“无效标记”并再次获得标记)
编写一个StudentMain类并编写main方法。
在这个类中,写一个方法
public static Student getStudentDetails() - 此方法应从用户那里获取学生的输入,使用这些详细信息创建一个学生对象并返回该对象。
主要通过调用 getStudentDetails 方法创建学生对象。还可以使用适当的方法计算该学生对象的平均值和成绩。
SGC 应用应获取输入并显示快照中指定的输出:
示例输入 1: 输入身份证: 123 输入名称: 汤姆 输入科目数: 3 为主题 1 输入标记: 95 为主题 2 输入标记: 80 输入主题 3 的标记: 75
样本输出 1:
编号:123 姓名:汤姆 平均:83.33 等级:O
示例输入 2:
输入编号: 123 输入名称: 汤姆 输入科目数: 0
主题数无效
输入科目数:
3 为主题 1 输入标记: 75 为主题 2 输入标记: 49 输入主题 3 的标记: 90
示例输出 2:
编号:123 姓名:汤姆 平均:71.33 等级:F
import java.util.*;
public class Student {
private int id;
private String name;
private int marks[];
private float average;
private char grade;
//Student(int id, String name, int marks[]){}
Student(){}
public void setId(int id) {
this.id =id;
}
public void setName(String name) {
this.name=name;
}
public void setMarks(int marks[]) {
this.marks =marks;
}
public void setAverage(float average) {
this.average=average;
}
public void setGrade(char grade) {
System.out.println("grade");
this.grade=grade;
}
public void calculateAvg() {
float average = (Arrays.stream(marks).sum())/(marks.length);
Student student = new Student();
student.setAverage(average);
}
public void findGrade() {
Student sm = new Student();
if(average>80.0 && average <= 100.0) {
sm.setGrade('O');
}
else if(average<50) {
sm.setGrade('F');
}
else
sm.setGrade('A');
}
public int getId() {
return id;
}
public String getName() {
return name;
}
public int[] getMarks() {
return marks;
}
public float getAverage() {
System.out.println("average");
return average;
}
public char getGrade() {
System.out.println("null");
return grade;
}
}
import java.util.Scanner;
public class StudentMain {
public static void main(String[] args) {
StudentMain object = new StudentMain();
object.getStudentDetails();
}
public static Student getStudentDetails() {
int i; int m[] = new int[100];
Scanner sc = new Scanner(System.in);
Student student = new Student();
System.out.println("Enter the id:");
int id= sc.nextInt();
student.setId(id);sc.nextLine();
System.out.println("Enter the name:");
student.setName(sc.nextLine());
do {
System.out.println("Enter the no of subjects:");
i = sc.nextInt();
if(i==0) {
System.out.println("Invalid number of subject");
}
}while(i==0);
for(int j = 1;j<=i;j++) {
System.out.println("Enter mark for subject "+j+":");
m[j-1]=sc.nextInt();
}
student.setMarks(m);
System.out.println("Id:"+student.getId());
System.out.println("Name:"+student.getName());
System.out.println("Average:"+student.getAverage());
System.out.println("Grade:"+student.getGrade());
return student;
}
}
运行代码后,我发现 setMarks(m) 没有将数组传递给 Student 类中的方法,输出是
ID:
姓名 :
平均:0.0
年级:
Avg 和 Grade 没有给出预期的输出。enter code here
【问题讨论】:
-
当你写了一个方法但不使用它的时候,为什么你仍然期望它被使用?
-
请参阅minimal reproducible example。您无需向我们提供您的全部作业和所有代码。专注于您需要帮助的基本问题,并尝试提出仅显示该问题的代码。这样做很可能让你自己已经解决了问题……如果没有,你可以把它带给其他人。请记住,您希望其他人免费为您花费时间,因此请投入您的时间,使其尽可能简单和直接。我,老实说,我读了 3 行之后就停止了阅读,甚至懒得看你的代码。
-
是的,问题很可能是您的代码没有调用
findGrade()方法。或者计算平均值的那个。 -
不,兄弟,我不是想免费花别人的时间。我已经在这个问题上工作了 2 天,但仍然无法弄清楚我在做什么..