0

注意:我将我的代码编辑为我认为人们试图告诉我的方式,但它仍然没有给我想要的输出。现在我的输出是“examples.search.Person@55acc1c2”,但是我多次输入新的名字和姓氏。至少它在没有崩溃的情况下通过代码

我正在学习如何使用 ArrayLists,并且需要加载一个包含我创建的对象实例的 Array 列表。我知道如何使用数组执行此操作,但对于此任务,我需要使用 ArrayList 执行此操作。这是我需要做的一个例子。

// my "main" class
package examples.search;

import java.util.ArrayList;

import dmit104.Util;

public class MyPeople {

    public static void main(String[] args) {

        ArrayList<Person> people = new ArrayList<Person>();
        Person tempPerson = new Person();
        String firstName;
        String lastName;
        char choice = 'y';
        int count = 1;

        // fill my ArrayList
        do {
            people.add(tempPerson);
            // I have a Util class that has a prompt method in it
            firstName = Util.prompt("Enter First Name: ");
            lastName = Util.prompt("Enter Last Name: ");

            tempPerson.setFirstName(firstName);
            tempPerson.setLastName(lastName);

            count++;

            choice = Util.prompt(
                    "Enter another person? [y or n]: ")
                    .toLowerCase().charAt(0);

        } while (choice == 'y');

        // display my list of people
        for(int i = 0; i < people.size(); i += 1) {
            System.out.print(people.get(i));
        }

    }

}

// my Person class which I am trying to build from
public class Person {

    // instance variables
    private String firstName;
    private String lastName;

    // default constructor
    public Person() {
    }

    public String getFirstName(){
        return firstName;
    }

    public void setFirstName(String firstName) {
        this.firstName = firstName;
    }

    public String getLastName() {
        return lastName;
    }

    public void setLastName(String lastName) {
        this.lastName = lastName;
    }
}

我已经尝试了多种方法,但无论我的 ArrayList 没有填满什么。就像我提到的那样,我可以用数组做到这一点,或者即使我有一个加载的构造函数方法,但我没有。在我的实际任务中,我应该使用 set 方法来完成。

我到处找,找不到解决问题的方法,而且星期五我的教练不在。

非常感谢你提前

狮子座

4

5 回答 5

2

您必须创建一个Person,然后add将其添加到ArrayList.

for (int i = 0; i < count; i++) {
    Person person = new Person();

    person.setFirstName("Foo");
    person.setLastName("Bar");

    people.add(person); 
}
于 2013-08-02T23:24:07.263 回答
1

它崩溃是因为您的线路people.get(i).setFirstName(firstName);首先尝试索引 i 处的内容,但您尚未设置任何内容。

首先将 people[i] 设置为空 Person,或者使用 firstName 和 lastName 创建一个人,然后将其添加到使用people.add(person);

于 2013-08-02T23:25:34.947 回答
0

您有一个ArrayList<Person>,但仅此一项就定义了潜在Person实例的列表。但到目前为止,每个列表条目都是null. get(i)返回null和以下导致null.setFirstName(..)NullPointerException。

因此,您需要创建Person应该进入列表的实例:

firstName = Util.prompt("Enter First Name: ");
Person p = new Person(); //create the instance
people.add(p); //add the instance to the list
p.setFirstName("..."); //set any values
于 2013-08-02T23:29:26.140 回答
0

现在您将 Person 对象存储到 ArrayList 中并打印该对象。要在打印 Person 对象时打印名字和姓氏,您必须重写 toString 方法。在您的 Person 类中添加以下代码

public String toString(){
    return String.format("[Personn: firstName:%s ,lastName: %s]", firstName,lastName);
}
于 2013-08-03T00:51:17.110 回答
0

至于您遇到的第二个问题,您必须覆盖类toString()中的方法Person。您获得的输出,例如类examples.search.Person@55acc1c2的默认toString()方法Object,定义为class@hashCode

于 2013-08-03T00:51:28.107 回答