我正在使用Java Netbeans。 我是面向对象编程(OOPG)的新手。 这是我的第一个任务,我在函数中遇到了一些问题。 我参考过实验练习。 但我仍未发现错误。 以下是我的代码:
//学生班
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我可以知道哪个部分犯了错误吗?
谢谢你的帮助。
I am using Java Netbeans. I am new to Object Oriented Programming (OOPG). This is my first assignment and I am having some issues with some calculations within a function. I have referred to lab exercises. But I still failed to spot the mistake. Below is my code:
//Student 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); } }//Student Client Class
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(); } }The output I received after running the student client class is :
Student Name: Pete Assignment Marks: 50 Practical Marks: 95 Exam Marks: 85 Overall Marks: 0.0 Final Grade: FMay I know which part have I made a mistake in?
Thank you for the help given.
最满意答案
首先,你犯了经典的错误,即执行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);这需要更改您的学生构造函数。
First of all, you made the classic mistake of performing int division and expecting a floating point result.
change
double overallMarks = ( ((am/100)*25) + ((pm/100)*25) + ((em/100)*50) );to
double overallMarks = ( ((am/100.0)*25) + ((pm/100.0)*25) + ((em/100.0)*50) );This will force floating point division.
In addition, instead of passing all the properties to setStudent, why don't you pass them to a constructor? That's a more common practice in Java.
So instead of
studentList [studentIndex] = new Student(); ... studentList[studentIndex].setStudent(studentName, assignmentMarks, practicalMarks, examMarks, overallMarks, finalGrade);I would write
.... studentList [studentIndex] = new Student(studentName, assignmentMarks, practicalMarks, examMarks, overallMarks, finalGrade);This requires changing your Student constructor.
更多推荐
发布评论