簡體   English   中英

從單獨的類中調用mutator方法

[英]Call a mutator method from a separate class

我有一個構造函數類如下:

public class Student
{
    // Declare variables
    public int studentID;
    public String courseName;
    public int courseScore;
    public char courseGrade;

    // Default constructor
    public Student()
    {
       studentID = 1;
       courseName = "CIS 2085";
       courseScore = 89;
    }


    //========================================

    // Constructor with parameters
    public Student(int id, String course, int score)
    {
       setStud(id, course, score);
    }


    //========================================

    public String toString()
    {
       return (studentID + " " + courseName + " " + courseScore);
    }


    //========================================

    public void setStud(int id, String course, int score)
    {
       studentID = id;
       courseName = course;
       courseScore = score;
    }


     //========================================

    public int getStudentID()
    {
       return studentID;
    }


    //========================================

    public String getCourseName()
    {
       return courseName;
    }


    //========================================

    public int getCourseScore()
    {
       return courseScore;
    }


    //========================================

    public char getCourseGrade()
    {
       return courseGrade;
    }


    //========================================

    public static char calculateGrade(int courseScore)
    {
       if (courseScore >= 94)
           courseGrade = 'A';

       else if ((courseScore >= 85) && (courseScore <= 93))
           courseGrade = 'B';

       else if ((courseScore >= 75) && (courseScore <= 84))
           courseGrade = 'C';

       else if ((courseScore >= 65) && (courseScore <= 74))
           courseGrade = 'D';

       else
           courseGrade = 'F';

       return courseGrade;
    }

    //========================================

}

到目前為止,我有我的實現類,如下所示:

import java.util.*;

public class StudentImplementation
{
    // Sllow 'console' to receive input from the user
    static Scanner console = new Scanner(System.in);

    // Method main
    public static void main(String[] args)
    {
        // Declare variables

        // Object 1: first. Uses the default constructor.
        Student first = new Student();

        //System.out.println(first);

        // Object 2: second.
        Student second = new Student(3, "Advanced Java Programming", 83);

        //System.out.println(second);

        // Use calculateGrade method to receive grade for object 1

        char grade = Student.calculateGrade(first.getCourseScore);
        System.out.println(grade);
    }
}

因此,我嘗試使用我的calculateGrade方法根據我的對象courseScore輸出相應的等級。

Student類與我的實現類位於一個單獨的文件中。

當我運行此程序時,我收到錯誤:

Exception in thread "main" java.lang.NoSuchMethodError: Student.calculateGrade(I)C
    at StudentImplementation.main(StudentImplementation.java:27)

將calculateGrade方法更改為:

public char calculateGrade() {
    courseScore = this.getCourseScore(); // This refers to the student
                                         // from whom you called the
                                         // calculaGrade() method -->
                                         // first.calculateGrade()
    if (courseScore >= 94) {
        courseGrade = 'A';
    } else if ((courseScore >= 85) && (courseScore <= 93)) {
        courseGrade = 'B';
    } else if ((courseScore >= 75) && (courseScore <= 84)) {
        courseGrade = 'C';
    } else if ((courseScore >= 65) && (courseScore <= 74)) {
        courseGrade = 'D';
    } else {
        courseGrade = 'F';
    }
    return courseGrade;
}

然后只需使用first.calculateGrade()。 並打印結果:

Student first = new Student();
char firstStudentGrade = first.calculateGrade();
System.out.println(firstStudentGrade);

PS:方法名稱不以大寫字母開頭;)

這是您的Student課程的更干凈版本,可以完成您希望它做的事情。 我已經取出了不必要的變量和方法,並將其清理了一下。

我這樣做的原因是因為現在,你的代碼包含很多沒有意義的東西(例如,在方法中添加一個參數,這樣你就可以在方法本身設置參數值然后返回它,使用一個構造函數中的setter方法)。

public class Student {
    public int studentID;
    public String courseName;
    public int courseScore;

    public Student() {
        this(1, "CIS 2085", 89);
    }

    public Student(int id, String course, int score) {
        this.studentID = id;
        this.courseName = course;
        this.courseScore = score;
    }

    @Override
    public String toString() {
        return studentID + " " + courseName + " " + courseScore;
    }

    public int getStudentID() {
        return studentID;
    }

    public String getCourseName() {
        return courseName;
    }

    public int getCourseScore() {
        return courseScore;
    }


    public char getCourseGrade() {
        if (courseScore >= 94) {
            return 'A';
        } else if (courseScore >= 85 && courseScore <= 93) {
            return 'B';
        } else if (courseScore >= 75 && courseScore <= 84) {
            return 'C';
        } else if (courseScore >= 65 && courseScore <= 74) {
            return 'D';
        }
        return 'E';
    }

}

以下是一個示例實現:

public class StudentImplementation {

    public static void main(String[] args) {
        Student first = new Student(); //default constructor
        System.out.println(first.getCourseGrade());
        Student second = new Student(3, "Advanced JAVA Programming", 83);
        System.out.println(second.getCourseGrade());
    }

}

使用:

public char CalculateGrade()
{
    if (this.courseScore >= 94)
        courseGrade = 'A';

    else if ((this.courseScore >= 85) && (this.courseScore <= 93))
        courseGrade = 'B';

    else if ((this.courseScore >= 75) && (this.courseScore <= 84))
        courseGrade = 'C';

    else if ((this.courseScore >= 65) && (this.courseScore <= 74))
        courseGrade = 'D';

    else
        courseGrade = 'F';

    g = courseGrade;

    return g;
}

稱之為:

System.out.println(first.CalculateGrade());

創建Student對象后,只需調用您的方法......

Student first = new Student();
first.CalculateGrade();

並從CalculateGrade(char gg)刪除g參數。 你不需要它。

更改聲明

char grade = Student.calculateGrade(first.getCourseScore);

char grade = Student.calculateGrade(first.getCourseScore());

你在方法調用期間錯過了()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM