java数组循环问题

时间:2016-07-21 15:43:39

标签: java arrays

我有一个特殊的问题,即在数组循环中分配元素时,事情就会发生。

当我离开循环并检查时,所有索引的相同数组值将设置为最后一个索引的数组值。以下是代码

JSONObject js = new JSONObject(json_string);
    JSONArray jsonArray=js.getJSONArray("customer");
    DataModelCollection[] dataModelCollection = new DataModelCollection[7];

for (int i=0;i<jsonArray.length();i++) {

    JSONObject json = jsonArray.getJSONObject(i);

    amont = json.getLong("BalanceAmount");
    custName = json.getString("CustName");
    partitionKey = json.getInt("PartitionKey");
    String date1 = json.getString("date");

    SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    Date date = df.parse(date1);

    dataModelCollection[i] = new DataModelCollection();

    dataModelCollection[i].setName(custName);
    dataModelCollection[i].setAccountNo(partitionKey);
    dataModelCollection[i].setAmount(amont);
    dataModelCollection[i].setCollectedDate(date);


    Log.i("inside_loop", ""+dataModelCollection[i].getName());

    }

    Log.i("outside_loop", ""+dataModelCollection[0].getName());
    Log.i("outside_loop", ""+dataModelCollection[1].getName());
    Log.i("outside_loop", ""+dataModelCollection[2].getName());
    Log.i("outside_loop", ""+dataModelCollection[3].getName());
    Log.i("outside_loop", ""+dataModelCollection[4].getName());
    Log.i("outside_loop", ""+dataModelCollection[5].getName());
    Log.i("outside_loop", ""+dataModelCollection[6].getName());

当我打印基本上在循环中的inside_loop时,正确显示了值。执行结束时检查&#34; outside_loop&#34;所有索引的值都变为dataModelCollection [6] .getName() - 这是最后一个索引的值。 amountdatepartitionKey的情况也一样。

不确定我哪里出错了。

无论它的价值在哪里,DataModelCollection模态类:

public class DataModelCollection {

public static long accountNo;
public static String name;
public static double amount;
public static Date collectedDate;

public DataModelCollection(long accountNo, String name, double amount, Date collectedDate) {
    this.accountNo = accountNo;
    this.name = name;
    this.amount = amount;
    this.collectedDate = collectedDate;
}

public DataModelCollection() {

}

public String getName() {
    return name;
}

public void setName(String name) {
    this.name = name;
}

public double getAmount() {
    return amount;
}

public void setAmount(double amount) {
    this.amount = amount;
}

public Date getCollectedDate() {
    return collectedDate;
}

public void setCollectedDate(Date collectedDate) {
    this.collectedDate = collectedDate;
}

public long getAccountNo() {
    return accountNo;
}

public void setAccountNo(long accountNo) {
    this.accountNo = accountNo;
}

我真的对导致这种情况的原因一无所知。请帮忙。

4 个答案:

答案 0 :(得分:2)

public static long accountNo;
public static String name;
public static double amount;
public static Date collectedDate;

这些必须是实例变量,而不是静态变量。

删除static关键字,它应该按您的意愿运行。

In laymans terms, what does 'static' mean in Java?

答案 1 :(得分:1)

您必须从每个关键字中删除关键字static。也可以将其从public更改为private,因为您使用setter和getter来更改这些值。

public static long accountNo;
public static String name;
public static double amount;
public static Date collectedDate;

private long accountNo;
private String name;
private double amount;
private Date collectedDate;

它们都成为最后一个设定值的原因是因为static表示变量属于class 而不是实例“对象”。因此,即使您使用dataModelCollection[i] = new DataModelCollection();创建新对象,当您更改静态变量时,它们也会影响所有DataModelCollection个对象。有关static / instance here的更多信息。

答案 2 :(得分:1)

DataModelCollection类的属性是静态的! 这意味着它们对于该类的所有实例都是通用的。 因此,您的循环每次只更改这些静态变量的值,因为它们对所有实例都是通用的。

答案 3 :(得分:1)

让我教你一些魔力!

删除您在 DataModelCollection 类中声明的变量中的关键字 static ,您的代码可以正常运行。