0

基本的に、単純な連絡先マネージャーを作成し、オブジェクトを配列リストに格納する必要があります。

私を苛立たせているのは、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クラスコンストラクタには、Scannerクラスを使用してオブジェクトのプロパティを初期化するコードがあります。

最初の呼び出しで「John」と入力し、2番目の関数呼び出しで「Peter」と入力すると、上記のコードが出力されます。

ピーターピーター。

なぜジョン・ピーターを印刷しないのですか?

私が考えることができる唯一のことは、おそらくJavaはオブジェクトへの参照のみをarraylistに格納し、変数とは異なり、関数の実行後にオブジェクトが破棄されないことです。

これを回避する方法はありますか?

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

PS。私は人々が宿題の質問としてそれを嫌う人々を知っています。しかし、私は新しいことを学ぶために、これを余分なものとしてやっています。元の割り当てでは、5つのオブジェクトをインスタンス化して、それらをArrayListに格納することはほとんど求められていません。そして、私はそれを実行しました。今、私はもっと動的な解決策を考え出すことができるかどうかを見ようとしています。

連絡先クラスコード:

import java.util.Scanner;

パブリッククラスの連絡先{

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;
}

}
4

1 に答える 1