有个类,如下:
class Person{
public String name;
public String sex;
public String age;
}有个文件note.txt,内容如下(回车用\n表示):
%n tom\n
%s male\n
%a 18\n
\n
%n mike\n
%s male\n
%a \n
\n
%n mary\n
%a 19\n
%s female\n
\n
这个文件的特点是记录每个人的三种信息,三种信息的排列没有规律(可能是name,sex,age也可能是name,age,sex),但是每个人的信息结束后,都有一个回车符.而且每个人的信息不一定是完整的,如上面的mike没有age信息.现在要写一个方法
public List<Person> getPerson(File f){}
即读入文件note.txt,返回一个List,List中应该含有Person类的3个实例,每个实例都要根据文件的内容被赋好相应的值,如果文件中没有对应的值则给该变量赋null.我做的结果有问题,虽然返回了3个实例,但赋的值都是最后一个人的信息.请知道怎么做的人把方法的代码写给我看看,或者告诉我做这题的关键在哪里?
谢谢.

解决方案 »

  1.   

    你的代码的所出现的错误是因为你定义Person对象的作用范围问题。
    比如:
    Person p=new Person();
    java.util.List list=new java.util.ArrayList();
    //读取文件,循环取出其中的所有person数据进行赋值
    while(condition)
    {
    //对p赋值
    p.setName();
    p.setSex();
    p.setAge();
    list.add(p);
    }
    你的代码结构肯定是这样的,所以才会造成你list中所有的persion对象的值都是最后一个的值,因为你始终改变的是一个person对象的值,list的add操作是针对对象地址的,事实上你只是反复的添加一个p对象,而这个p对象的值在每次循环的时候都在被改变。应该改成下面的结构:java.util.List list=new java.util.ArrayList();
    //读取文件,循环取出其中的所有person数据进行赋值
    while(condition)
    {
    Person p=new Person();
    //对p赋值
    p.setName();
    p.setSex();
    p.setAge();
    list.add(p);
    }
    就不会出现你的说情况了。