Java 是否可以从“返回或以某种方式访问数据”;课程“;从这个方法?

Java 是否可以从“返回或以某种方式访问数据”;课程“;从这个方法?,java,methods,return,Java,Methods,Return,我正在做我的第一个Java编程作业,我还有一个问题。我将课程[]放在学生[]中,但现在似乎遇到了NullPointerException错误,我不知道为什么 public Student[] analyzeData() { Scanner inputStream = null; try { inputStream = new Scanner(new FileInputStream("Programming Assignment 1 Data.txt"));

我正在做我的第一个Java编程作业,我还有一个问题。我将课程[]放在学生[]中,但现在似乎遇到了NullPointerException错误,我不知道为什么

public Student[] analyzeData() {
    Scanner inputStream = null;

    try {
        inputStream = new Scanner(new FileInputStream("Programming Assignment 1 Data.txt"));
    } catch (FileNotFoundException e) {
        System.out.println("File Programming Assignment 1 Data.txt could not be found or opened.");
        System.exit(0);
    }

    int numberOfStudents = inputStream.nextInt();
    int tuitionPerHour = inputStream.nextInt();

    Student[] students = new Student[numberOfStudents];
    for (int i = 0; i < numberOfStudents; i++) {
        String firstName = inputStream.next();
        String lastName = inputStream.next();
        int studentID = inputStream.nextInt();
        String isTuitionPaid = inputStream.next();
        int numberOfCourses = inputStream.nextInt();


        Course[] courses = new Course[numberOfCourses];
        for (i = 0; i < numberOfCourses; i++) {
            String courseName = inputStream.next();
            String courseNumber = inputStream.next();
            int creditHours = inputStream.nextInt();
            String grade = inputStream.next();
            Course currentCourse = new Course(courseName, courseNumber, creditHours, grade);
            courses[i] = currentCourse;
        }
        Student currentStudent = new Student(firstName, lastName, studentID, isTuitionPaid, numberOfCourses, courses);
        students[i] = currentStudent;
    }
    return students;
}

其中课程有关于课程的信息,学生有关于学生的信息。

文件的自然对象映射将是
学生
对象的列表,每个对象都包含
课程
对象的列表。
courses
数组应存储在学生对象中。

文件的自然对象映射将是
student
对象的列表,每个对象都包含
courses
对象的列表。
courses
数组应该存储在student对象中。

Hmm,我这样做的方式是在内存中有一个表示解析文件的数据结构。所以基本上看起来是这样的:

public class RegistrationFile{

  private Students[] students;
  private Courses[] courses;

  public void loadFromFile(File f){
  //do your logic to parse the file
  //and store the results in the appropriate data members
  }

  public Students[] getStudents(){
    return students;
  }

  public Courses[] getCourses(){
    return courses;
  }
}

然后,从其他代码创建注册文件对象的实例,并调用
loadFromFile()
来加载数据,然后再尝试访问任何内容。

Hmm,这样做的方法是在内存中有一个表示已解析文件的数据结构。所以基本上看起来是这样的:

public class RegistrationFile{

  private Students[] students;
  private Courses[] courses;

  public void loadFromFile(File f){
  //do your logic to parse the file
  //and store the results in the appropriate data members
  }

  public Students[] getStudents(){
    return students;
  }

  public Courses[] getCourses(){
    return courses;
  }
}

然后,您可以从其他代码创建注册文件对象的实例,并在尝试访问任何内容之前调用
loadFromFile()
加载数据。

除了设置正确的对象来表示学生/课程之外(正如@ChrisThompson所做的),您希望能够读取任意数量的学生/课程记录,对吗

您需要相应地解析文件。例如,当您点击一个空行时,您知道您正在转到下一条记录(第一条记录除外)。还可以利用这样一个事实,即第一行是学生(或者如果它有5个代币),后续行是她的课程(或者如果该行有4个代币)


该单元应包括整个输入文件循环中的一次迭代。在循环的一次迭代中创建一个给定的学生对象和他的课程对象。

除了设置正确的对象来表示学生/课程(正如@ChrisThompson所做的那样),您还希望能够读取任意数量的学生/课程记录,对吗

您需要相应地解析文件。例如,当您点击一个空行时,您知道您正在转到下一条记录(第一条记录除外)。还可以利用这样一个事实,即第一行是学生(或者如果它有5个代币),后续行是她的课程(或者如果该行有4个代币)

该单元应包括整个输入文件循环中的一次迭代。创建一个给定的学生对象,他的课程对象循环一次。

我会向
student
添加一个数组(或者更好的是,数组列表或映射),其中包含学生正在学习的课程

在你所做的事情中,你如何决定哪些课程适合哪些学生

尝试添加以下实例变量

  private List<Course> courses;
阅读文件可能是一件非常痛苦的事情,至少目前来说,你所拥有的还可以。实例化
Course
的循环将包括调用
student.addCourse(Course)
。那你就是金色的

请注意,这是一个高层次的概述,因此这里可能有一些学习内容供您参考。只需发回,我们将提供帮助。

我会在
学生
中添加一个数组(或者更好的是,添加一个数组列表或一个映射),其中包含学生正在学习的课程

在你所做的事情中,你如何决定哪些课程适合哪些学生

尝试添加以下实例变量

  private List<Course> courses;
阅读文件可能是一件非常痛苦的事情,至少目前来说,你所拥有的还可以。实例化
Course
的循环将包括调用
student.addCourse(Course)
。那你就是金色的


请注意,这是一个高层次的概述,因此这里可能有一些学习内容供您参考。请回复,我们会提供帮助。

首先,如果您使用eclipse(我强烈建议您使用),请尝试ctrl+shift+f,这是一种自动格式,可以让您的代码更易于阅读,直到您养成自己使用良好格式的习惯。您能指定发生
NullPointerException
的位置吗?尽管如此,我敢打赌,与扫描仪对象相关的所有代码都应该封装在
try…catch
块中,因为如果找不到文件,
inputStream
将为空。首先,如果您使用的是eclipse(我强烈推荐),请尝试ctrl+shift+f,它是自动格式化的,在您养成自己使用良好格式化的习惯之前,它可以使您的代码更易于阅读。您能否指定发生
NullPointerException
的位置?尽管如此,我敢打赌,与扫描仪对象相关的所有代码都应该封装在
try…catch
块中,因为如果找不到文件,
inputStream
将为空。我不是下选者,但我可能是因为你的答案离题,与所问问题无关,并对文件的分配/结构做出毫无根据的假设。有一个包含学生列表的文件,然后是一个课程列表,没有隐式对象映射或选择忽略该映射的文件读取函数,这是完全合理的。您实际查看过该文件和用于读取该文件的代码吗?每个学生行包含多个课程,以下几行是该学生的课程(每门课程一行)。这还远远没有脱离主题:因为这是数据的结构,所以对象应该是这样设计的。返回学生名单将返回一切:学生和他们的课程。这是一种关系,sa