0

我正在尝试将一个包含几个人的名字和姓氏的文件从一个文件输入到一个 java 程序中。我有一个 People 类,它有两个字符串作为名字和姓氏,以及访问器和修改器来访问信息。在我的 main 方法中,我有一个 while 循环,它逐行引入每个人,直到文件结束。假设通过构造函数为每一行创建一个新的 Person 实例并复制到数组中。当我在while循环结束后打印出数组的内容时,似乎数组中填充了文件中最后一个人的信息。但是,如果我注释掉 String[] values = line.split("\t"); 和 Person child = new Person(values[0], values[1]); 行并使用一个二维数组来保存文件中所有信息的副本,然后它就可以正常工作了。是否有什么我做错了,导致我无法保留 People 数组中文件中包含的所有个人姓名的副本?

public class Person
{
protected static String first;
protected static String last;
private static int id;

public Person(String l, String f)
{
    last = l;
    first = f;

} // end of constructor

public String getFirst()
{
    return first;
} // end of getFirst method

public static String getLast()
{
    return last;
} // end of getLast method

public static int getID()
{
    return id;
} // end of getLast method

public static void setFirst(String name)
{
    first = name;
} // end of setFirst method 

public static void setLast(String name)
{
    last = name;
} // end of setLast method

public static void setID(int num)
{
    id = num;
} // end of setLast method 

} // end of Person class






public class Driver 
{

public static void main(String arg[])
{

    Person[] temp = new Person[10]; 

    try 
    {   
        BufferedReader br = new BufferedReader(new FileReader(arg[1]));
        String line = null;
        int counter = 0;

        while ((line = br.readLine()) != null)
        {
            String[] values = line.split("\t");

            Person child = new Person(values[0], values[1]);

            temp[counter] = child;

            System.out.println("Index " + counter + ": Last: " + child.getLast() + " First: " + child.getFirst());
            System.out.println("Index " + counter + ": Last: " + temp[counter].getLast() + " First: " + temp[counter].getFirst() + "\n");

            counter++;              
        }

        br.close();

        } 

        catch(Exception e)
        {
            System.out.println("Could not find file");
        }

        for(int row = 0; row < 7; row++)
        {
            System.out.print("Row: " + row + " Last: " + temp[row].getLast() + " First: " + temp[row].getFirst() + "\n");
        }
}
} // end of Driver class
4

1 回答 1

0

Person 类中的字段不应该是静态的,静态字段意味着类的所有实例共享值,这意味着所有 10 个实例 Person 具有相同的“first”、“last”和“id”值。您还需要将 Person 的方法更改为非静态方法,因为静态方法无法访问静态字段。

于 2013-07-26T23:36:58.703 回答