【问题标题】:Unable to assign value to function in Object Oriented Programming, Array无法在面向对象编程、数组中为函数赋值
【发布时间】:2015-05-18 07:08:59
【问题描述】:

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

我可以知道我在哪个部分做错了吗?

感谢您的帮助。

【问题讨论】:

    标签: java arrays function oop netbeans


    【解决方案1】:

    首先,您犯了一个典型的错误,即执行 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 构造函数。

    【讨论】:

    • 我倾向于写 x * (1/100d) 而不是 x/100.0 因为它执行乘法并且对我来说更具可读性。至于作者,它变成double overallMarks = am * (25/100d) + pm * (25/100d) + em * (50/100d)
    • 谢谢@Eran,我没有意识到它会受到影响。您的解决方案解决了我的问题。 :)
    • @BinkanSalaryman 是的,我会的,我正在等待计时器到期,我可以接受 Eran 的回答 :)
    猜你喜欢
    • 2011-11-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-25
    • 1970-01-01
    • 2021-10-25
    • 2013-04-09
    相关资源
    最近更新 更多