2010-11-13 49 views
3

我有点困惑java如何创建不同对象的数组/矩阵

我创建了一个名为person的类,它具有age和name属性(以及get set方法)。 然后在另一个班级中,我想要创建一组人员,每个人的年龄和姓名都不相同。但是,最后我的一些人最后的名字和年龄结束了。 如果我手动创建它们,那么它是好的,但与for循环我有这个问题。 我应该怎么做才能得到不同的人?

这里是人类的代码:

public class person { 
static String name; 
static int age; 
public person() { 
    name="name"; 
    age=0; 
} 
public static String getName() { 
    return name; 
} 
public static void setName(String name) { 
    person.name = name; 
} 
public static int getAge() { 
    return age; 
} 
public static void setAge(int age) { 
    person.age = age; 
} 

public static void main(String[] args) { 
    // TODO Auto-generated method stub 

} 

}

而这里就是我要创造我的阵列/矩阵代码:

public class array { 
static person[][] a; 

public static void main(String[] args) { 
    a=new person[3][3]; 


    //manual created person 
    person first=new person(); 
    person second=new person(); 
    person third=new person(); 
    first.setAge(12); 
    first.setName("first"); 
    second.setAge(20); 
    second.setName("second"); 
    third.setAge(40); 
    third.setName("third"); 


    //automatic (here I get the disired effect) 
    for (int i = 0; i < a.length; i++) { 
    for (int j = 0; j < a.length; j++) { 
    a[i][j]=new person(); 
    a[i][j].setAge(10+j); 
    a[i][j].setName("Alia"+i); 
    System.out.println(i+" "+j+" "+a[i][j].getName()+" "+a[i][j].getAge()); 
    } 
    } 

// a[0][0]=first; 
// a[0][1]=second; 
// a[1][2]=third; 
// System.out.println(a[0][0].getName()+" "+a[0][0].getAge()); 

    //for checking , and it doesnt work anymore 
    System.out.println(a[0][0].getName()+" "+a[0][0].getAge()); 

// for (int i = 0; i < a.length; i++) { 
// for (int j = 0; j < a.length; j++) { 
// System.out.println(i+" "+j+" "+a[i][j].getName()+" "+a[i][j].getAge()); 
// } 
// 
// } 
    getname(); 

} 

private static void getname() { 
    System.err.println("get name function"); 
    for (int i = 0; i < a.length; i++) { 
    for (int j = 0; j < a.length; j++) { 
    System.out.println(a[i][j].getName()); 
    } 
    } 

} 

} 

回答

3

取出static关键字来自个人属性。如果它是静态它使用所有实例(所有人对象)。

但我会做这样的:

public class Person { 
    public final String name; 
    public final int age; 

    public Person(String name, int age) { 
     this.name = name; 
     this.age = age; 
    } 

    public String toString() { 
     return name + " (" + age + ")"; 
    } 

    public static void main(String... args) { 
     List<Person> people = new LinkedList<Person>(); 
     people.add(new Person("David", 28)); 
     people.add(new Person("Andreas", 27)); 

     System.out.println(people); 
    } 
} 
1

是的,你的属性声明为static。静态属性“属于”该类,而不是实例,所以所有实例都看到相同的String和int。你应该没问题,只是从main()中除去静态。然后,新的Person()将为每个人分配新的单独变量。

0

问题是静态字段。分配给它们的最后值将反映在所有对象中。

+0

谢谢大家,我在任何地方都删除了静态文件,它工作正常。我从来不知道静态和它的作用。现在我的眼睛被打开了一点。再次感谢^^ – ace 2010-11-13 21:03:29