ArrayList返回所有条目的最后一项

时间:2013-03-16 22:59:37

标签: java arraylist

我正在尝试使用对象填充ArrayList以传递给ArrayAdapter(最终)。我已经将一些代码提取到一个小型测试项目来说明问题。

我有一个名为Rules的类,它有两个成员,Gender和Age(Rules.Java)。在MyArrayTest类中,我创建了Rules对象的实例,并将它们添加到rule_parts ArrayList中。当我遍历数组时,循环执行预期的次数,但重复最后一个元素。请有人指出原因。

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

3 个答案:

答案 0 :(得分:5)

您需要GenderAge非 - static否则这些字段只会为每个类成员变量保留一个值:

public String gender;
public Integer age;

除此之外: Java命名约定表明变量以小写字母开头Gender gender等。

答案 1 :(得分:4)

问题是您的数据成员是static

public static String Gender;
public static Integer Age;

这意味着它们由该类的所有实例共享。

删除static个关键字,您就可以了。

答案 2 :(得分:1)

问题是规则类中的静态变量。删除static关键字。静态变量按类进行实例化。所以它始终采用最新值