[英]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.