一道java编程题(给类中变量赋值),高手帮帮我
有个类,如下:
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个实例,但赋的值都是最后一个人的信息.
请知道怎么做的人把方法的代码写给我看看,或者告诉我做这题的关键在哪里?
谢谢.
------解决方案--------------------up
------解决方案--------------------你的代码的所出现的错误是因为你定义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);
}
就不会出现你的说情况了。
------解决方案--------------------支持楼上的!
------解决方案--------------------学习学习。。。