java - 无法在面向对象编程、数组中为函数赋值

标签 java arrays function oop netbeans

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

相关文章:

javascript - 根据唯一 ID 合并两个数组

javascript - JS 修改 PHP 数组

javascript - 调用 javascript 函数,其名称在变量中

javascript - 在字符串中查找子字符串

c++ - const 成员函数/方法的用处

java - Spring无法加载xml配置文件

java - Intellij 未导入更新的 jar

c - C编程中的数组索引

Java,为什么我的图形超出了它们应该在的框架/范围?

java - 资源文件中的最终变量