调用多个类,第二个类不起作用

时间:2013-11-01 02:05:31

标签: java class

我的代码问题是我有一个名为Student的课程。本课程计算学生的成绩,并列出他们的姓名和成绩。第二课叫做CourseOffering,用于计算学期的数量,课堂上的学生人数等。第三课是将它们放在一起的东西。最重要的是,从.txt文件中读取信息。我测试了我的Student类,我得到的值是正确的,它工作正常,但后来我尝试将CourseOffering类方法添加到等式中,我得到了这个错误......

 Exception in thread "main" java.lang.NullPointerException
at CourseOffering.setNumberOfSemesters(CourseOffering.java:17)
at CourseStatistics.main(CourseStatistics.java:21)

学生班有代码读取.txt文件,我不会包含其余部分,因为它并不重要......

public void openFile(){
  try { //start try statement
    scanner = new Scanner(new File("gradesA5.txt"));  //initialize scanner to scan from the grades.txt file
  } //end try statement
  catch (FileNotFoundException e) { //start catch statement
    System.out.println("Error opening file. Please make sure that you have a grades.txt file in the same folder as GradeCalculator.class"); //print statement telling user that the grades.txt file is not in the right place
    System.exit(0); //system exit 
  } //end catch statement
}

CourseOffering课程......

 import java.io.File;
 import java.io.FileNotFoundException;
 import java.util.Scanner;

 public class CourseOffering {

private Scanner scanner;

//initialize data members
private int students;
private String description;

private int numberOfSemesters;
int studentArrayCount = 0;

public void setNumberOfSemesters(){
    if(scanner.hasNext()){
        numberOfSemesters = scanner.nextInt();
    }
}

public int getNumberOfSemesters(){
    return numberOfSemesters;
}

public void setStudents(){
    int[] student = new int[numberOfSemesters];
    student[studentArrayCount] = scanner.nextInt();
    students = student[studentArrayCount];
    studentArrayCount++;
}

public void computeHomeworkAverage(){

}

public void computeTestAverage(){

}

public void countPassingStudents(){

}
 }

最后调用方法的类......

 import java.io.File;
 import java.io.FileNotFoundException;
 import java.util.Scanner;

 public class CourseStatistics {

public static void main(String[] args) {


    Student myStudent = new Student();

    CourseOffering myCourse = new CourseOffering();


    myStudent.openFile();

    myCourse.setNumberOfSemesters();

    myStudent.testing();

    for(int i = 0; i < 4; i++){

    myStudent.setfirstName();

    myStudent.setLastName();

    myStudent.setAssignmentScore();

    myStudent.setLabScore();

    myStudent.setMidterm1Score();

    myStudent.setMidterm2Score();

    myStudent.setFinalExamScore();

    myStudent.setQuizScore();

    myStudent.setAttendanceScore();

    myStudent.setPATScore();

    myStudent.setZyanteScore();

    myStudent.computeLetterGrade();

    System.out.println(myStudent.getFirstName() + " " + myStudent.getLastName() + " " + myStudent.computeTotalHomeworkScore() + " " + myStudent.computeTotalTestScore() + "      " + myStudent.getLetterGrade());
    }
    System.out.println(myCourse.getNumberOfSemesters());
}   
 }

基本上我需要知道如何调用CourseOffering类,它也可以从读取Student类的.txt文件中读取,同时不会出现错误。任何帮助将不胜感激!!

1 个答案:

答案 0 :(得分:0)

我认为你的问题可能是你没有

scanner = new Scanner(System.in);

代码中的任何位置,意味着当您尝试使用它时它为null。

编辑:我只是查看了你所拥有的非代码阻止代码(并为你修复了代码),并看到你在该类中创建了一个新的Scanner对象。但是,CourseOffering类中的扫描程序不是同一个,并且仍为空。

您可能必须将您在学生中创建的扫描仪对象传递到CourseOffering才能在那里使用,或者更好地在main方法中创建它并将其传递给两者。

<强> EDIT2:

您必须将其作为构造函数中的值传递。请考虑以下类:

class Human{

  int height;//in cm

  public Human(int inputHeight){
    height = inputHeight;
  }

}

然后当你创建它时 -

Human h = new Human(190);

然后h的高度值将为190.

同样的概念适用于传递像扫描仪这样的对象,一旦你正确设置它,它就可以在新对象中使用。