0

注: 人々が私に伝えようとしていると思う方法でコードを編集しましたが、それでも目的の出力が得られません。私の出力は "examples.search.Person@55acc1c2" ですが、何度も新しい姓名を入力します。少なくとも、クラッシュすることなくコードを実行しています笑

ArrayLists の使用方法を学んでおり、作成したオブジェクトのインスタンスを含む配列リストをロードする必要があります。配列でこれを行う方法は知っていますが、この割り当てでは 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 を使用して person を作成し、それを使用して people に追加します。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 オブジェクトを出力するときに firstname と lastName を出力するには、toString メソッドをオーバーライドする必要があります。Person クラスに次のコードを追加します。

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

2 番目の質問については、クラスのtoString()メソッドをオーバーライドする必要があります。次のように定義されているクラスからのデフォルトのメソッドPersonなど、取得している出力examples.search.Person@55acc1c2toString()Objectclass@hashCode

于 2013-08-03T00:51:28.107 に答える