我有一个特殊的问题,在数组中的循环中分配元素时,事情发生得很好。
当我移出循环并检查时,所有索引的相同数组值将设置为最后一个索引的数组值。以下是代码
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
时这基本上是在循环值中正确显示的。当执行出来并检查“outside_loop”时,所有索引的值都变为 dataModelCollection[6].getName() - 这是最后一个索引的值。 amount
的情况也是如此, date
, partitionKey
.
不知道我哪里错了。
无论它的值(value)如何,这里都是 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;
}
我真的不知道是什么导致了这种情况。请帮忙。
最佳答案
public static long accountNo;
public static String name;
public static double amount;
public static Date collectedDate;
这些需要是实例变量,而不是静态变量。
删除 static
关键字,它的行为应该如您所愿。
关于java数组循环问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38508678/