Java ArrayList作为构造函数的参数,以及有关从文件中读取数组列表的问题
我已经花了三天的时间试图解决这些问题,但没有达到我的预期效果。以下是说明和代码: 说明:Java ArrayList作为构造函数的参数,以及有关从文件中读取数组列表的问题,java,arraylist,readfile,Java,Arraylist,Readfile,我已经花了三天的时间试图解决这些问题,但没有达到我的预期效果。以下是说明和代码: 说明: 人类 Student类继承自Person:最重要的是favSubject属性的数据类型是ArrayList 教师课堂继承自人 PrintInfo类包含:构造函数、打印方法和从文件读取方法 人员类别: public class Person { protected String name; public Person(String name){ this
- 人类
- Student类继承自Person:最重要的是favSubject属性的数据类型是ArrayList
- 教师课堂继承自人
- PrintInfo类包含:构造函数、打印方法和从文件读取方法
public class Person {
protected String name;
public Person(String name){
this.name = name;
}
//setter and getter
@Override
public String toString(){
return this.name;
}
}
学生班级:
public class Student extends Person {
private String id;
private ArrayList<String> favSubject;
private double score;
public Student(String name, String id, ArrayList<String> favSubject, double score){
super(name);
this.id = id;
this.favSubject = favSubject;
this.score = score;
}
//setter and getter
@Override
public String toString(){
return this.name + "-" + this.id + "-" + this.favSubject + "-" + this.score;
}
}
打印信息类
import java.util.*;
import java.io.*;
import java.lang.String;
public class PrintInfo {
private ArrayList<Person> persList;
//Constructor
public PrintInfo(String path, String path1) throws FileNotFoundException{
persList = getInfoFromFile(path, path1);
}
//Print method
public void printInfoList(){
for(Person p : persList){
System.out.println(p);
}
}
//Read from file method
public ArrayList<Person> getInfoFromFile(String path, String path1) throws FileNotFoundException{
ArrayList<Person> result = new ArrayList<>();
try {
//this code is hidden because of privacy
} catch (FileNotFoundException e) {
System.out.println("An error occurred.");
e.printStackTrace();
}
return result;
}
}
我想用getInfoFromFile()方法从2个文件ListOfPerson(基本信息)和FSInfo(favSubject属性的收藏夹主题)中读取数据,然后将其显示在屏幕上
listoperson.txt:
结构:
- 学生:顺序,身份证,姓名,分数
- 老师:顺序、姓名、科目
A01, Math, Physics
A02, Physics
A03, Chemistry, History
A04, Math, Geography
A05, Chemistry
A06, Biology
我想在屏幕上显示的内容:
David - A01 - [Math,Physics] - 10
Kate - Physic
John - A02 - [Physics] - 9
Olivia - A03 - [Chemistry,History] - 9
Helen - Math
Sarah - A04 - [Math,Geography] - 8
Nick - History
Jennie - A05 - [Chemistry] - 10
Jeremy - A06 - [Biology] - 9
Mary - Chemistry
这只是练习的开始,所以我必须解决这个问题,以满足更多的要求。
非常感谢:))
更新:问题解决:))谢谢大家
- Student类继承自Person:最重要的是favSubject属性的数据类型是ArrayList
favSubject
的数据类型特别重要。我还是不确定我是否看到了它。但是,关于这个属性,我看到的是,它的数据记录在一个独立于主要人员数据的文件中。由于在构建时需要学生的favSubject
数据,因此您有两个主要选择:
每次您认识到需要构建一个学生
,请阅读喜爱的主题文件以查找该学生喜爱的主题
首先读取并解析整个最喜欢的主题文件,将结果存储在一个便于以后访问的表单中。就我个人而言,我会使用地图
,以学生ID为关键,以最喜欢的主题列表为值
其中,我推荐后者,因为它更高效、更模块化(更易于编写、理解和调试)
对于您来说,另一个主要问题可能是如何在人员列表文件中区分学生和教师。在这些之间识别最简单的差别可能是字段的数量,所以考虑每次读取文件的完整行
String line = myReader.nextLine();
,将行拆分为,
分隔符上的字段
String[] fields = line.split(", *");
,并使用字段计数区分学生(4个字段)和教师(3个字段)。这也让您在构造函数参数上领先
这就是我准备给你的暗示。但是,就代码风格而言,我注意到path
和path1
对于方法参数来说是完全没有信息的名称,尤其是在没有任何代码文档的情况下。我建议使用更具描述性的名称,特别是用于识别文件路径的名称。我的建议:我不会将教师和学生混为一谈。这只会使事情复杂化。我也不会混合它们,@NomadMaker,或者如果我确实混合了它们,那么我会使用一种更清楚区分哪个是哪个的格式。但我认为输入文件的格式是作业的一部分,不允许修改。这个问题似乎与您的问题非常相似。我重新编写了代码,它可以工作,但它不打印favSubject数组列表(它只是打印David-A01-[]-10)。你能帮我查一下吗?@huy_tran_2308,我不明白你为什么要用最喜欢的科目做这样的体操。当你需要一个学生最喜欢的科目列表时,为什么不直接从地图中检索并按原样使用呢?@huy_tran_2308,现在问题中给出的代码似乎正确地完成了这项工作,前提是没有一个学生拥有两个以上的科目。如果它似乎没有完成任务,那么我建议使用调试器来跟踪它的行为。这是你复杂的方法,以获取数据回来,似乎有问题的我。非常感谢你!我已经修复了它,它运行成功
David - A01 - [Math,Physics] - 10
Kate - Physic
John - A02 - [Physics] - 9
Olivia - A03 - [Chemistry,History] - 9
Helen - Math
Sarah - A04 - [Math,Geography] - 8
Nick - History
Jennie - A05 - [Chemistry] - 10
Jeremy - A06 - [Biology] - 9
Mary - Chemistry
String line = myReader.nextLine();
String[] fields = line.split(", *");