我的代码问题是我有一个名为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文件中读取,同时不会出现错误。任何帮助将不胜感激!!
答案 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.
同样的概念适用于传递像扫描仪这样的对象,一旦你正确设置它,它就可以在新对象中使用。