Хранение объектов в связанном списке - PullRequest
1 голос
/ 06 марта 2019

Я создаю простую программу, которая читает данные из текстового файла и отображает их в консоли. Данные, которые я отображаю, представляют собой информацию о студенте - имя, идентификатор, предмет, оценки и т. Д.

Программа читает текстовый файл и создает объект ученика для каждого найденного пользователя. Я сталкиваюсь с проблемой при попытке сохранить этих студентов в связанном списке. Кажется, каждый раз создается новый список, который переопределяет предыдущий, поэтому я всегда получаю в списке только одного ученика.

Как я могу сохранить их без переопределения предыдущих списков? Вот мой код ниже:

public static boolean readFile(String filename) {
    File file = new File(filename);
    try {
    Scanner scanner = new Scanner(file);
    while(scanner.hasNextLine()){
     String[] words = scanner.nextLine().split(",");

     int id = Integer.parseInt(words[0]);
     String firstName = words[1];
     String lastName = words[2];
     int mathMark1 = Integer.parseInt(words[3]);
     int mathMark2 = Integer.parseInt(words[4]);
     int mathMark3 = Integer.parseInt(words[5]);
     int englishMark1 = Integer.parseInt(words[6]);
     int englishMark2 = Integer.parseInt(words[7]);
     int englishMark3 = Integer.parseInt(words[8]);

     addStudent(id,firstName,lastName,mathMark1,mathMark2,mathMark3,englishMark1,englishMark2,englishMark3);
     }
    scanner.close();
    } catch (FileNotFoundException e) {
    System.out.println("Failed to read file");
    }
     return true;
    }


private static void addStudent(int id, String firstName, String lastName,int
        mathsMark1, int mathsMark2, int mathsMark3, int englishMark1, int englishMark2,
        int englishMark3) {
    LinkedList<Student> student = new LinkedList<>();
    student.add(new Student(id,firstName,lastName));

    LinkedList<AssignmentMarks> mathematicsMarks = new LinkedList<>();
    mathematicsMarks.add(new AssignmentMarks("Mathematics",mathsMark1,mathsMark2,mathsMark3));

    LinkedList<AssignmentMarks> englishMarks = new LinkedList<>();
    englishMarks.add(new AssignmentMarks("English",englishMark1,englishMark2,englishMark3));
}

Этот код выше в моем Главном классе. Код ниже взят из моего студенческого класса:

public class Student {

    private int id;
    private String firstName;
    private String lastName;
    private AssignmentMarks mathMarks;
    private AssignmentMarks englishMarks;

    public Student(int id, String firstName, String lastName) {
        this.id = id;
        this.firstName = firstName;
        this.lastName = lastName;
    }

    public String getFullName() {
        return firstName;
    }
}

Любая помощь будет оценена спасибо, ребята!

Ответы [ 2 ]

2 голосов
/ 06 марта 2019

Эта переменная

LinkedList<Student> student = new LinkedList<>();

должна быть объявлена ​​вне метода, как поле или внутри readFile и передана в качестве параметра, в противном случае она будет создаваться при каждом вызове addStudent

1 голос
/ 06 марта 2019

Объявите ваш LinkedList как член класса, потому что здесь каждый раз, когда вы звоните addStudent(), вы создаете новый список.

Вместо этого вы должны сделать что-то вроде:

public class Test {

   private LinkedList<Student> student = new LinkedList<>();

   public static boolean readFile(String filename) {
      // ...
      addStudent(id,firstName,lastName,mathMark1,mathMark2,mathMark3,
                 englishMark1,englishMark2,englishMark3);

   }

   private static void addStudent(int id, String firstName, String lastName,int
        mathsMark1, int mathsMark2, int mathsMark3, int englishMark1, int englishMark2,
        int englishMark3) {
     // ...

     // this will now add it to the only instance of the list 
     student.add(new Student(id,firstName,lastName));
   }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...