如何使用数组对象从主方法调用抽象方法



在下面的代码中,我试图计算出给定绩点和学分值的本科生的GPA。但是我怎样才能调用main方法中的calGPA方法呢?CalGPA应该是一个抽象的方法,所以我不能使它成为静态的,因为我在考试中使用JDK7。有可能的解决方案吗。我认为我的CalGPA逻辑也错了。。。当我尝试调用getGradePoints方法时,我会得到这个异常。为什么?线程中的异常";主";java.lang.NullPointerException:无法调用"String.equals(Object(";因为"0"的返回值;本科生.getResult(("为空

public abstract class Student{
private String name;
private String courseName;
private String result;
private int creditValue;
private String regNo;
private double gradePoint;
private String degree;
String grade;

Student(String name, String regNo,String degree){
this.name = name;
this.regNo = regNo;
this.degree = degree;
}

Student( String courseName,int creditValue, String result){
this.courseName = courseName;
this.creditValue = creditValue;
this.result = result;
}

public void setName(String name){
this.name = name;
}
public String getName(){
return name;
}
public void setCourseName(String courseName){
this.courseName = courseName;
}
public String getCourseName(){
return courseName;
}
public void setResult(String result){
this.result = result;
}
public String getResult(){
return this.result;
}
public void setCreditValue(int creditValue){
this.creditValue = creditValue;
}
public int getCreditValue(){
return this.creditValue;
}
public void setRegNo(String regNo){
this.regNo = regNo;
}
public String getRegNo(){
return this.regNo;
}
public void setGradePoint(double gradePoint){
this.gradePoint = gradePoint;
}
public double getGradePoint(){
return this.gradePoint;
}
public abstract void calGPA(Student[] st);
public String getDegree() {
return degree;
}
public void setDegree(String degree) {
this.degree = degree;
}

}
public class Undergraduate extends Student{
Undergraduate(String name,String regNo,String degree){
super(name,regNo,degree);
}
Undergraduate(String courseName,int creditValue, String result){
super(courseName,creditValue,result);
}

public void calGPA(Student[] under){
int totalCredits = 0;
double sumOf = 0;
for(int i =0;i<under.length;i++) {
sumOf += under[i].getGradePoint()*under[i].getCreditValue();
totalCredits = totalCredits + under[i].getCreditValue();
}
double GPA = sumOf/totalCredits;
System.out.println("GPA : "+GPA);
}

public static void undergradDetails(Student[] under, Undergraduate u1){
System.out.println("********Student Information*************");
System.out.println("Name : "+u1.getName());
System.out.println("Registration Number : "+u1.getRegNo());
System.out.println("Degree: "+u1.getDegree());
System.out.println("SubjecttGrade");
for(int i =0;i<under.length;i++){
System.out.println(" "+under[i].getCourseName() + " t"+under[i].getResult());
}
}
public double getGradePoints(Student[] under){
if(getResult().equals("A+")){
setGradePoint(4.25);
}if(getResult().equals("A")){
setGradePoint(4.00);
}if(getResult().equals("A-")){
setGradePoint(3.75);
}if(getResult().equals("B+")){
setGradePoint(3.50);
}if(getResult().equals("B")){
setGradePoint(3.25);
}if(getResult().equals("B-")){
setGradePoint(3.00);
}if(getResult().equals("C+")){
setGradePoint(2.75);
}if(getResult().equals("C")){
setGradePoint(2.50);
}if(getResult().equals("C-")){
setGradePoint(2.25);
}if(getResult().equals("D")){
setGradePoint(1.25);
}if(getResult().equals("F")){
setGradePoint(0.00);
}
return getGradePoint();
}


}
public class Driver{
public static void main(String[] args){

Undergraduate u1 = new Undergraduate("Amila Gunathilake","UG/2011/10045","BSc");
Student[] under = new Undergraduate[6];
under[0] = new Undergraduate("CS105",1,"A");
under[1] = new Undergraduate("CS102",3,"B-");
under[2] = new Undergraduate("ST104",1,"C");
under[3] = new Undergraduate("CH109",3,"A-");
under[4] = new Undergraduate("CH106",2,"A+");
under[5] = new Undergraduate("CS103",2,"A");
under.calGPA(under);
System.out.println(u1.getGradePoints(under));

您应该调用u1.calGPA(under)而不是calGPA(under),以使您的程序基本上不会出现编译错误。

已添加:你的代码有很多问题。

  1. 您的构造函数签名是

    Undergraduate(String courseName, int creditValue, String result)

稍后初始化构造函数是可以的

new Undergraduate("CS105", 1, "A")

然后在calGPA函数中,将gradePoint乘以creditvalue并保存。

under[i].getGradePoint() * under[i].getCreditValue();

其总和总是为0。

最新更新