当前位置: 首页 > 知识库问答 >
问题:

java数组循环问题[重复]

桑博远
2023-03-14

我有一个特殊的问题,当在数组中分配循环中的元素时,事情发生得很好。

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

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()-这是最后一个索引的值.相同是金额日期分区键的情况。

不知道我哪里错了。

无论它的价值在这里是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;
}

我真的不知道是什么导致了这种情况。请帮忙。

共有3个答案

束飞捷
2023-03-14

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

东方宜
2023-03-14

您必须从每个列表中删除关键字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意味着变量属于,而不是实例“object”。因此,即使您正在使用dataModelCollection[i]=newdatamodelcollection()创建新对象,当您更改静态变量时,它们将影响所有DataModelCollection对象。这里有更多关于静态/实例的信息。

邹玄裳
2023-03-14
public static long accountNo;
public static String name;
public static double amount;
public static Date collectedDate;

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

删除static关键字,它的行为应该符合您的要求。

用外行人的话说,“静态”在Java中是什么意思?

 类似资料:
  • 我一直得到一个错误,但我不明白为什么。这个错误是关于不能从double转换成int,但是我把所有东西都声明成double,所以我不明白为什么会出现这个错误。

  • while循环开始之前的语句没有打印,并且从1开始没有打印循环中的值。相反,它从一个随机的大int开始打印。

  • 我已经创建了一个字符串数组,其中包含单词“磅”、“美元”和“欧元”,我想把这些标签放在旗帜的左边(为了用户应用程序的清晰性,因为不是每个用户都知道哪个货币属于哪个国家)。 我创建了一个循环,将创建一个标签,并将其分配到旗帜的左侧,它应该使一个"英镑"标签,然后一个"美元",然后一个"欧元"每次穿越Y轴南部,使他们与旗帜对齐然后,它将重置数组计数以返回到正确的字符串,沿着x轴移动并再次重复。然而,它

  • 所以我想看看有没有办法循环这些数组,看看哪一个与main函数中提供的{6,1,1,6,3,1,4,7,7,1}的数组匹配。

  • 问题内容: 我的Java应用程序在编译代码时遇到问题,它说它找不到符号 roomLength 。应用程序应该执行的操作是提示用户输入房间名称,然后如果该房间名称为“退出”,则必须关闭该程序。否则会提示输入房间的长度,宽度和高度。如果这些尺寸中的任何一个等于或小于零,它将再次提示输入尺寸。 这是我的主要方法。 提前致谢!;) 还有一个几乎与此问题类似的问题,只是它应该循环回到第一个提示,允许用户输入

  • 我是java的新手,我正在编写这个简短的程序,您可以在其中猜测1到10之间的数字。正确的数字存储为整数。如果您猜测较低的数字,它应该说“正确的数字较高”,如果您猜测较高,它应该说“正确的数字较低”。这是我所拥有的: 所以很明显这是行不通的,因为如果你输入一个更小的数字,它会跳到下一个数字,即使这个数字更大,它也是正确的。那么,我如何解决这个问题,让它检查两个语句呢?抱歉解释得不好。谢了。