чтение файла в Arraylist, но списки аргументов различаются по длине - PullRequest
0 голосов
/ 05 апреля 2019

Я застрял в вопросе о fileIO. По сути, есть класс Student с именем readStudent, который возвращает объект ArrayList.

Меня попросили прочитать файл и разделить его на 3 части одним пробелом, и не разрешается использовать сканер.

файл:

Эми Мур 60

Хлоя Скотт 40

Мои вопросы: (1) поскольку в классе Student есть только два параметра (String, Double), как я могу добавить две строки и одну Double в Student? (2) В предоставленном классе Student нет метода toString (), как его распечатать?

Буду очень признателен, если кто-нибудь сможет мне помочь.

Конструктор Студента похож на:

 public Student(String sstudent, double mmark) 

Студент чтения:

 public static ArrayList<Student> readStudent(String fName){

Что я сделал до сих пор:

 ArrayList<Student> list=new ArrayList<Student>();
 try{

    BufferedReader br=new BufferedReader(new FileReader(fName));

     String line;

     while((line=br.readLine())!=null){


        String[] splitLine=line.split(" ");
        String first=splitLine[0];
        String second=splitLine[1];
        Double third=Double.parseDouble(splitLine[3]);

       Student stu=
            new Student(first,second));


        list.add(stu);


    }

  ...... 

  return list;

}

Ответы [ 2 ]

0 голосов
/ 05 апреля 2019

У вас есть разные варианты в коде: // Задача 1 (см. Первый комментарий выше):
Если вам по каким-либо причинам не нужны первое, второе и третье место, перейдите к варианту 1 (это эффективно).

public static ArrayList<Student> readStudent(String fName) throws FileNotFoundException, IOException{

        ArrayList<Student> list=new ArrayList<Student>();
        //try{

        BufferedReader br=new BufferedReader(new FileReader(fName));

        String line;

        while((line=br.readLine())!=null){

            //option1
            String[] splitLine=line.split(" ");
            Student stu = new Student(splitLine[0] + " " + splitLine[1], splitLine[2]);

            //option2
//            String first=splitLine[0];
//            String second=splitLine[1];
//            double third=Double.parseDouble(splitLine[3]);            
//            Student stu = new Student(first + " " + second, third); 


            list.add(stu);


        }

        //......

        return list;
    }

// Задача 2:
В java getter и setter используются для доступа к атрибуту класса (это предпочтительный стиль). Проверьте, есть ли в классе ученик, затем используйте его.
В варианте 2 вы можете получить доступ к глобальной переменной direction объекта ученика.

printStudents(readStudent("your file name"));     //print a list of student objects 

void printStudents(List<Student> students){
    for(Student stu: students)
        //option 1: using getter
        System.out.println(stu.getSStudent()+"  "+stu.getMark());

        //option 2: accessing attributes 
        //System.out.println(stu.sstudent+"  "+stu.mark);
}
0 голосов
/ 05 апреля 2019

Для вашей проблемы (1)

Student s = new Student(first + " " + second, third);
//by the way for third,it is not splitLine[3],it is splitLine[2]

Для вашей проблемы (2)

ArrayList<Student> studentList = readStudent("YourFileName");
for(Student s : studentList)
    System.out.println(s.name + " " + s.grade);//don't know what are the variable names of Student class instances
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...