2012-05-02 96 views
0

基本的には、単純な連絡先マネージャを作成し、オブジェクトを配列リストに格納する必要があります。ArrayListに格納されたオブジェクトが上書きされないようにする

私に不快感を与えるのは、私がnewContactメソッドを呼び出すと、Contactの新しいインスタンスが作成され、ArrayListに格納されるということです。問題は、そのメソッドを呼び出すたびに、リスト内の他のすべてのオブジェクトが上書きされることです。

import java.util.ArrayList; 
public class ContactManager { 

    public static ArrayList<Contact> contactList = new ArrayList<Contact>(); 
    public static Contact[]c = {}; 

    public static void main(String[]args){ 
    newContact(); 
    newContact(); 

    System.out.println(contactList.get(1).getName()); 
    System.out.println(contactList.get(0).getName()); 
    } 

    public static void newContact(){ 
    Contact c = new Contact(); 
    contactList.add(c); 
    } 
} 

Contactクラスconstructorには、Scannerクラスを使用してオブジェクトのプロパティを初期化するコードがあります。

最初の呼び出しで、私は「ジョン」と入力し、第2の機能の呼び出しで、私は「ピーター」と入力した場合、上記のコードは、プリントアウトします:

ピーター ピーター。

なぜジョンピーターが表示されないのですか?私は考えることができる

だけの事はArrayListの内のオブジェクトへの多分Javaの店舗のみ参照することを、および関数の実行後の変数とは異なり、オブジェクトが破棄されません..です

この周りの任意の方法?

これは私が達成しようとしていることを説明してくれることを願っています。

PS。私は人々が宿題に質問する人を嫌うことを知っています。しかし、私は新しいことを学ぶためにこれを余分にしています。オリジナルの割り当てでは、5つのオブジェクトをインスタンス化してArrayListに格納することはほとんどありません。そして、私はそれを完了しました、今私はもっとダイナミックな解決策を思いつくことができるかどうかを見極めようとしています。

Contactクラスコード:

import java.util.Scanner; 

パブリッククラスの接触{Contactクラスのメンバーが静的であるためにです

private static String name, number; 

//constructor will ask to enter contact details 
public Contact(){ 
    Scanner in = new Scanner(System.in); 

    System.out.println("Enter name:"); 
    name = in.next(); 

    System.out.println("Enter number:"); 
    number = in.next(); 
} 

//getters and setters 

public static String getName(){ 
    return name; 
} 

public static String getNumber(){ 
    return number; 
} 

public static void setName(String newName){ 
    name = newName; 
} 

public static void setNumber(String newNumber){ 
    number = newNumber; 
} 

} 
+0

ジョンピーターが印刷されます。エラーはあなたのコードにあります。 'Contact()'のコードを表示できますか? – twain249

+0

プロパティを初期化するコードを表示してください。 –

+0

連絡先リストが「静的」と宣言されているため、問題が発生する可能性があります。コードを確認せずに確認することはできません。 –

答えて

1

。つまり、すべてのContactインスタンスが同じnamenumberを共有しています。 new Contactするたびに、これらの変数の新しいコピーを取得するようにインスタンスメンバーにする必要があります。

関連する問題