Java, как создать массив / матрицу различных объектов - PullRequest
3 голосов
/ 13 ноября 2010

Я немного сбит с толку

Я создал класс с именем person, который имеет атрибуты age и name (и получает методы 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 ]

3 голосов
/ 13 ноября 2010

Удалите ключевое слово 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 голос
/ 13 ноября 2010

Да, ваши атрибуты объявлены статическими.Статический атрибут «принадлежит» классу, а не экземплярам, ​​поэтому все экземпляры видят одну и ту же String и int.Вы должны быть в порядке, просто удаляя статические элементы из всего, кроме main ().Затем new Person () выделит для каждого новые отдельные переменные.

0 голосов
/ 13 ноября 2010

Проблема в статических полях.Последние присвоенные им значения будут отражены во всем объекте.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...