У меня есть метод с именем файла в качестве ввода и должен вернуть массив в качестве вывода. Файл содержит записи студентов с именами и отметками предметов - PullRequest
0 голосов
/ 28 сентября 2019

У меня есть класс Student, и в основном классе у меня есть метод, который принимает fileName (файл содержит записи об учащемся с именами и отметками предметов) в качестве входных данных и возвращает массив Student в качестве выходных данных.

Я пытался использовать ArrayList, однако я застрял при преобразовании записи студента в массив студента.Пожалуйста, помогите .. Ниже мой код:

public static void main(String[] args) throws FileNotFoundException {
    String filename = "student.txt";
    readData(filename);
}

private static Student[] readData(String filename) throws FileNotFoundException{
    Scanner input = new Scanner(new File(filename));

    ArrayList<Student> list = new ArrayList<Student>();
    while(input.hasNext()){
        String name = input.next();
        int physic = input.nextInt();
        int chemistry = input.nextInt();
        int math = input.nextInt();
        Student studentR = new Student(name,physic,chemistry,math);
        list.add(studentR);
        System.out.println(list);
    }
    for (Student studentR : list) {
        System.out.println(studentR);
        return studentR;
    }
}

И мой текстовый файл выглядит так:

Amy 85 95 78
Nancy 83 93 82
Richard 81 91 86
Daniel 77 78 79
James 80 90 85
Cathy 95 74 89
Paul 84 87 79

Ниже приведена ошибка, которую я получаю:

Main.java:28: error: incompatible types: Student cannot be converted to Student[]
                        return studentR;
                               ^

Ответы [ 2 ]

0 голосов
/ 28 сентября 2019

Во-первых, вы должны изменить тип возвращаемого значения на List, поскольку ваши данные хранятся в ArrayList, а не только в Array.Во-вторых, возврат из цикла for - это не то, что вам нужно, он должен быть вне цикла.И, наконец, объект не будет напечатан только с записью имени объекта в system.out.print, вам нужно распечатать элемент, получив доступ к его элементу, например studentR.name, studentR.marks и т. Д.

0 голосов
/ 28 сентября 2019

Попробуйте этот код:

 public static void main(String[] args) throws FileNotFoundException {
     String filename = "student.txt";
     readData(filename);
 }

 private static List < Student > readData(String filename) throws FileNotFoundException {
     Scanner input = new Scanner(new File(filename));
     List < Student > list = new List < Student > ();

     while (input.hasNext()) {
         String name = input.next();
         int physic = input.nextInt();
         int chemistry = input.nextInt();
         int math = input.nextInt();
         Student studentR = new Student(name, physic, chemistry, math);
         list.add(studentR);
         System.out.println(list);
     }

     for (Student studentR: list) {
         System.out.println(studentR);
     }

     return list;
 }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...