0

以下に for ループ コードがあります。カスタム表示関数を呼び出して、aBook arrayList オブジェクトが最後のクラス オブジェクトを 3 回追加するだけであることがわかりました。なぜそれが起こっているのですか?

Scanner s = new Scanner(System.in);
    ArrayList<LiFiAddressBook> aBook = new ArrayList<LiFiAddressBook>();
    // taking input for every LifIAddressBook and adding them to the ArrayList.
    for (int i = 0; i < 3; i++) {
        System.out.println("Entry " + i+1);
        System.out.print("Please Enter First Name: ");
        String a = s.nextLine();
        System.out.println();
        System.out.print("Please Enter Last Name: ");
        String b = s.nextLine();
        System.out.println();
        System.out.print("Please Enter Street Address: ");
        String c = s.nextLine();
        System.out.println();
        System.out.print("Please Enter City: ");
        String d = s.nextLine();
        System.out.println();
        System.out.print("Please Enter Zip Code: ");
        int e = s.nextInt();
      // in the next line we need to fire a blank scan function in order consume the nextLine. because after executing s.nextInt compiler skip a scan function for a weird reason
        s.nextLine();
        System.out.println();

        LiFiAddressBook x = new LiFiAddressBook(a, b, c, d, e);
        aBook.add(x);


    }

ここに私のLiFiAddressBookクラスがあります

public class LiFiAddressBook {

static  String  first_name, last_name, street_address, city_state;
static int zip_code;

public LiFiAddressBook(String first, String last, String street, String city, int zip) {
  //constructor for class object.
    first_name = first;
    last_name = last;
    street_address = street;
    city_state = city;
    zip_code = zip;
}

public  String get_first() {
    return first_name;
}

public String get_last() {
    return last_name;
}

public String get_address() {
    return street_address;
}

public String get_city() {
    return city_state;
}

public String get_zip() {
    return Integer.toString(zip_code);
}

public static void display() {
    System.out.println("First Name: "+first_name);
    System.out.println("Last Name: "+last_name);
    System.out.println("Street Address"+street_address);
    System.out.println("City State: "+city_state);
    System.out.println("Zip Code: "+zip_code);


}

}

4

3 に答える 3

2

static キーワードにより、コンストラクターが呼び出されるたび
public LiFiAddressBook(String , String , String , String , int )
に古い値が新しい値で上書きされ、リスト内の要素が出力されると、LiFiAddressBook クラスのオブジェクトの変数は同じオブジェクトを指します。したがって、同様のオブジェクトを印刷します。

明確にするために、実際には LiFiAddressBook の 3 つのインスタンスがあります。ただし、これらの LiFiAddressBook インスタンスの変数/プロパティは同じオブジェクトを参照します。

于 2013-08-30T17:08:24.837 に答える
1

作る:

static  String  first_name, last_name, street_address, city_state;
static int zip_code;

の中へ:

String  first_name, last_name, street_address, city_state;
int zip_code;

また、おそらくこれを変更する必要があります:

public static void display() {

に:

public void display() {
于 2013-08-30T16:54:32.280 に答える