2015-10-20 87 views
3

我有一个构造函数类作为这么叫赋值函数方法:从一个单独的类

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 
{ 

    //allow '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) 

编辑

+0

你能否解释一下是什么问题?我不明白什么是错的。 – dguay

+0

我不明白你有什么问题。你不能简单地调用calculateGrade方法吗? –

+0

我想调用方法CalculateGrade在我的实现文件中工作。以便它将采用对象1(第一个)的courseScore并给我courseGrade。 – burgoyne

回答

0

怎么样

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()); 
+0

这是我的错误,当我输入:线程“main” java.lang.NoSuchMethodError 异常:Student.CalculateGrade()C \t在StudentImplementation.main(StudentImplementation.java:25) – burgoyne

+0

和默认的构造函数,课程成绩为89. – burgoyne

+0

您在哪里定义了CalculateGrade()方法 – AbtPst

0

创建Student对象后,只需调用你的方法...

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

,并从CalculateGrade(char gg)删除g参数,你不需要它。

3

您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:方法名称不以大写字母开始;)

+0

如果对象已经初始化,那么它应该给出属性的正确值。 – AbtPst

+0

线程“main”中的异常java.lang.NoSuchMethodError:Student.calculateGrade()C \t at StudentImplementation.main(StudentImplementation.java:25) 这就是我在尝试的时候收到的。 – burgoyne

+0

您是否在Student类中将CalculateGrade(char g)方法更改为calculateGrade()? – Fundhor

3

这是你的学生类的清洁版本,你想要它做的事情。我已经拿出了不必要的变量和方法,并将其清理了一下。

我这样做的原因是因为现在,你的代码包含很多没有意义的东西(例如,向方法中添加一个参数,以便可以在方法本身中设置参数值,然后返回它,在你的构造函数中使用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()); 
    } 

} 
+1

谢谢。我想知道这是什么。函数呢?我从来没有听说过。 – burgoyne

+0

这是指调用函数的对象。所以当我们做first.getCourseGrade()时,这指的是'第一个'对象 – AbtPst

+1

'this'指的是对象的当前实例。例如,您的“学生”类,每个“学生”对象包含课程成绩,课程名称和学生ID。这意味着可以有多个'Student'对象的实例,每个实例都有它们自己的值 - 'this'关键字有助于Java编译器知道如何区分它们。如果您需要更多信息,请参阅Oracle的其他文档:https://docs.oracle.com/javase/tutorial/java/javaOO/thiskey.html – nbokmans