Запутался в том, как реализовать ArrayList - PullRequest
0 голосов
/ 26 ноября 2018

Так что я смотрел на ArrayLists и был озадачен тем, как добавлять элементы в массив, не объясняя каждый раз повторение указывать people.add (person1) для каждого объекта.Этот код, который я сейчас компилирую, но ничего не печатает в консоли.Я считаю, что моя ошибка связана с конструктором объектов и people.add(this).Что я делаю не так?


import java.util.ArrayList;

public class People {

  int age;
  String name;

  static ArrayList<People> people = new ArrayList<People>();

  public People(String name, int age){
    this.name = name;
    this.age = age;
    people.add(this);
  }    

  People person1 = new People("Bob", 41);
  People person2 = new People("Arthur", 32);
  People person3 = new People("Tom",18);

  public static void main(String[] args){

    for(People p : people) {
      System.out.println(p.name);
    }
  }
}

Ответы [ 3 ]

0 голосов
/ 26 ноября 2018

Попробуйте это:

import java.util.ArrayList;

public class People {

  int age;
  String name;

  People(String name, int age){
    this.name = name;
    this.age = age;


    Main.people.add(this);
  }    

}

public class Main {

  public static ArrayList<People> people = new ArrayList<People>();

  public static void main(String[] args){

  People person1 = new People("Bob", 41);
  People person2 = new People("Arthur", 32);
  People person3 = new People("Tom",18);


    System.out.println(people.size());

    for(People p : people) {
      System.out.println(p.name);
    }
  }

}
0 голосов
/ 26 ноября 2018

Вы немного усложнили свои коды.Для игры с ArrayList вы можете объявить ArrayList в методе main и там сами создавать объекты класса People и добавлять объекты people в ArrayList.Как вы создали эти три экземпляра класса People в классе People, создание объекта People приведет к циклической ссылке, ведущей к StackOverflowError.

. Вы должны изменить свой код на что-то вроде этого, а такжепечатая значимую информацию для объекта People, вам необходимо переопределить метод toString из класса Object, в противном случае он просто распечатает адрес объекта, который может показаться вам мусором.

public class People {

    int age;
    String name;

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

    @Override
    public String toString() {
        return String.format("age: %s, name: %s", age, name);
    }

    public static void main(String[] args) {
        ArrayList<People> people = new ArrayList<People>();

        People person1 = new People("Bob", 41);
        People person2 = new People("Arthur", 32);
        People person3 = new People("Tom", 18);

        people.add(person1);
        people.add(person2);
        people.add(person3);

        people.forEach(System.out::println);
    }
}

Попробуйте это и дайте мне знать, если вы сталкиваетесь с какой-либопроблемы.

0 голосов
/ 26 ноября 2018

список массивов - это переменная static.People объекты, которые вы создаете, являются нестатическими переменными, которые создаются только при вызове конструктора.Вы должны переместить создание объекта в функцию main().

public static void main(String[] args){
  People person1 = new People("Bob", 41);
  People person2 = new People("Arthur", 32);
  People person3 = new People("Tom",18);

    for(People p : people) {
      System.out.println(p.name);
    }
  }

, вы можете узнать больше о статических переменных здесь

...