4

ArrayAdapterに渡すオブジェクトをArrayListに入力しようとしています(最終的に)。この問題を説明するために、いくつかのコードを小さなテストプロジェクトに引き出しました。

GenderとAge(Rules.Java)の2つのメンバーを持つRulesというクラスがあります。MyArrayTestクラスでは、Rulesオブジェクトのインスタンスを作成し、それらをrule_partsArrayListに追加しています。配列をループすると、ループは予想される回数実行されますが、最後の要素が複製されます。誰かがその理由を指摘してください。

Rules.Java

public class Rules {
public static String Gender;
public static Integer Age;


public Rules(String G, Integer C) {
//super();
    Gender = G;
    Age = C;
    }
}

メインクラス-MyArrayTest.java

import java.util.ArrayList;


public class MyArrayTest {


private static ArrayList<Rules> rule_parts = new ArrayList<Rules>();

public static void main(String[] args) {


// Rules Array  
rule_parts.add(new Rules("Male",25));
rule_parts.add(new Rules("Female",22));

System.out.printf("\n\nRules:\n\n");
for (Rules r : rule_parts) {
    System.out.printf (r.Gender + "\n");
    System.out.printf(r.Age + "\n");


    }

}

}

出力は次のとおりです。

ルール:

女性22

女性22

4

3 に答える 3

5

作成する必要があります。作成Genderしない場合Agestaticこれらのフィールドはクラスメンバー変数ごとに1つの値のみを保持します。

public String gender;
public Integer age;

余談ですが、Javaの命名規則では、変数は小文字で始まることなどが示されています Gender gender

于 2013-03-16T23:03:17.413 に答える
4

問題は、データメンバーがstatic次のとおりであるということです。

public static String Gender;
public static Integer Age;

これは、それらがクラスのすべてのインスタンスによって共有されることを意味します。

キーワードを削除staticすれば、準備は完了です。

于 2013-03-16T23:03:29.680 に答える
1

問題は、ルールクラスの静的変数です。staticキーワードを削除します。静的変数はクラスごとにインスタンス化されます。したがって、常に最新の値を取ります

于 2013-03-16T23:09:58.110 に答える