0

私のコードの問題は、Student というクラスがあることです。このクラスは、生徒の成績を計算し、生徒の名前と成績を一覧表示します。2 番目のクラスは CourseOffering と呼ばれ、学期数、クラスの学生数などを計算するために使用されます。3 番目のクラスは、すべてをまとめたものです。さらに、情報は .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
}

コース開講クラス...

 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());
}   
 }

基本的に、エラーを取得せずに Student クラスから読み取った .txt ファイルから読み取っていると思われる CourseOffering クラスを呼び出す方法を知る必要があります。どんな助けでも大歓迎です!!

4

1 に答える 1

0

あなたの問題は、あなたが持っていないことかもしれないと思います

scanner = new Scanner(System.in);

つまり、使用しようとすると null になります。

編集:私はあなたが持っていた(そしてあなたのためにそれを修正した)コードのブロックされていない部分を見て、そのクラスで新しい Scanner オブジェクトを実際に作成することを見ました。ただし、CourseOffering クラスのスキャナーは同じものではなく、まだ null です。

おそらく、student で作成したスキャナー オブジェクトを CourseOffering に渡して使用する必要があります。または、main メソッドで作成して両方に渡すことをお勧めします。

EDIT2:

コンストラクターで値として渡す必要があります。したがって、次のクラスを検討してください。

class Human{

  int height;//in cm

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

}

それからあなたがそれを作成するとき -

Human h = new Human(190);

h の高さの値は 190 になります。

同じ概念は、スキャナーなどのオブジェクトを渡す場合にも機能します。スキャナーを正しく設定すると、新しいオブジェクト内で使用できるようになります。

于 2013-11-01T02:07:53.520 に答える