无法为面向对象编程,数组中的函数赋值(Unable to assign value to function in Object Oriented Programming, Array)

编程入门 行业动态 更新时间:2024-10-26 07:26:40
无法为面向对象编程,数组中的函数赋值(Unable to assign value to function in Object Oriented Programming, Array)

我正在使用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: F

May 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.

更多推荐

本文发布于:2023-07-31 09:41:00,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1341929.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:赋值   面向对象   函数   组中   Unable

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!