日期:2014-05-20  浏览次数:20626 次

一道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);
}


就不会出现你的说情况了。
------解决方案--------------------
支持楼上的!
------解决方案--------------------
学习学习。。。