我正在使用 Java Netbeans。我是面向对象编程(OOPG)的新手。这是我的第一个作业,我在函数内的一些计算上遇到了一些问题。我已经提到了实验室练习。但我还是没能发现错误。下面是我的代码:
//学生类(class)
package student;
public class Student {
private String studentName
private int assignmentMarks;
private int practicalMarks;
private int examMarks;
private double overallMarks;
private String finalGrade;
public Student(){
}
public setStudent (String sName, int aMarks, int pMarks, int eMarks, double oMarks, String fGrade){
studentName = sName;
assignmentMarks = aMarks;
practicalMarks = pMarks;
examMarks = eMarks;
overallMarks = oMarks;
finalGrade = fGrade;
}
//Setters
public void setStudentName (String sn) {
studentName = sn;
}
public setAssignmentMarks (int am) {
assignmentMarks = am;
}
public setPracticalMarks (int pm) {
practicalMarks = pm;
}
public setExamMarks (int em) {
examMarks = em;
}
public setOverallMarks (om) {
overallMarks = om;
}
public setFinalGrade (fg) {
finalGrade = fg;
}
//Getters
public String getStudentName() {
return studentName;
}
public int getAssignmentMarks() {
return assignmentMarks;
}
public int getPracticalMarks() {
return practicalMarks;
}
public int getExamMarks() {
return examMarks;
}
public double getOverallMarks() {
return overallMarks;
}
public String getFinalGrade() {
return finalGrade;
}
//method to calculate overall marks
//assignment 25% + practical 25% + exam 50%
public double calOverallMarks (int am, int pm, int em){
double overallMarks = ( ((am/100)*25) + ((pm/100)*25) + ((em/100)*50) );
return overallMarks;
}
//method to calculate final grade by overall marks
public String calFinalGrade (double om) {
if (om >=90 ) {
return "A";
} else if (om >=70) {
return "B";
} else if (om >=50) {
return "C";
} else {
return ""F";
}
}
//method to display overall and finalgrade score for input
public void displayMarks(){
System.out.println("Overall Marks: " + overallMarks);
System.out.println("Final Grade: " + finalGrade);
}
}
//学生客户端类
package student;
import java.util.Scanner;
public class StudentClient {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String studentName;
int assignmentMarks;
int practicalMarks;
int examMarks;
double overallMarks =0;
String finalGrade;
int option;
int studentIndex=0;
Student[] studentList = new Student[10];
System.out.println("MENU- Select 2 to enter student details")
option = sc.nextInt();
if (option == 2) {
studentIndex++;
studentList [studentIndex] = new Student();
System.out.print("Student Name: ");
studentName = sc.nextLine();
System.out.print("Assignment Marks: ");
assignmentMarks = sc.nextInt();
System.out.print("Practical Marks: ");
practicalMarks = sc.nextInt();
System.out.print("Exam Marks: ");
examMarks = sc.nextInt();
overallMarks = studentList[studentIndex].calOverallMarks(assignmentMarks, practicalMarks, examMarks);
finalGrade = studentList[studentIndex].calFinalGrade(overallMarks);
studentList[studentIndex].setStudent(studentName, assignmentMarks, practicalMarks, examMarks, overallMarks, finalGrade);
studentList[studentIndex].writeOutput();
}
}
运行学生客户端类后收到的输出是:
Student Name: Pete
Assignment Marks: 50
Practical Marks: 95
Exam Marks: 85
Overall Marks: 0.0
Final Grade: F
我可以知道我在哪一部分犯了错误吗?
感谢您提供的帮助。
最佳答案
首先,您犯了执行 int 除法并期望浮点结果的经典错误。
改变
double overallMarks = ( ((am/100)*25) + ((pm/100)*25) + ((em/100)*50) );
至
double overallMarks = ( ((am/100.0)*25) + ((pm/100.0)*25) + ((em/100.0)*50) );
这将强制浮点除法。
此外,为什么不将所有属性传递给 setStudent
,而是将它们传递给构造函数?这是 Java 中更常见的做法。
所以而不是
studentList [studentIndex] = new Student();
...
studentList[studentIndex].setStudent(studentName, assignmentMarks, practicalMarks, examMarks, overallMarks, finalGrade);
我会写
....
studentList [studentIndex] = new Student(studentName, assignmentMarks, practicalMarks, examMarks, overallMarks, finalGrade);
这需要更改您的 Student 构造函数。
关于java - 无法在面向对象编程、数组中为函数赋值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29072261/