【问题标题】:Java - Strange Behavior of ArrayList [closed]Java - ArrayList 的奇怪行为
【发布时间】:2013-10-11 20:03:50
【问题描述】:

--- 非常感谢 cmets 和您留下的提示!我解决了我的问题! ---

我有一个问题,这里是我的 Java 代码:

    ArrayList<Row> row = getARowList();
    while (data.readRecord()) {
        double houseId = data.getSomething();
        int buildTime = data.getSomethingElse();
        for (Row row : rows) {
            // !!!!!!
            row.setAge("DefaultValue"); // !!!!
            // !!!!!**
            if (row.getID() == houseId) {
                if (buildTime < 2009 && buildTime > 1000) {
                    if ((2009 - buildTime) > 30) {
                        row.setAge("OLD");                          

                    } else {
                        row.setAge("NEW");

                    }
                } 
            }
        }

    }

    for (Row row : rows) {
        System.out.println("Strange Thing: " + row.getAge());
    }

如果我运行它,我会得到输出:
奇怪的事情:默认值
奇怪的事情:默认值
奇怪的事情:默认值
奇怪的事情:默认值
奇怪的事情:默认值
奇怪的事情:默认值
奇怪的东西:新


如果我删除“!!!!!!”之间的行(row.setAge("DefaultValue");) 那么结果是:
奇怪的东西:旧
奇怪的东西:旧
奇怪的东西:新
奇怪的东西:null
奇怪的东西:旧
奇怪的东西:null
奇怪的东西:新

举个例子。 最后一个就是我想要的。我只想用“DefaultValue”替换“null”。但是当我之前设置默认值时(参见“!!!!!!”)结果是错误的,除了最后一个值之外的所有值都有值“DefaultValue”。

有人对此有解释吗?我在这里坐了2个小时,我基本上不明白出了什么问题。 提前致谢!

【问题讨论】:

  • 学习使用调试器的基础知识需要不到 2 小时。
  • 您正在修改引用的状态。这并不奇怪。奇怪的是你必须写一个 Q/A 而不是使用调试器。
  • 你也在浮点上使用==
  • 如何编译?多个变量命名为row,一个命名为rows,没有声明。
  • 你为什么用一个double来存放一个ID?通常,您会使用 long(ID 的实际标准)。您不能保证语句 row.getID() == houseId 中的相等性

标签: java arraylist


【解决方案1】:

在for循环结束时,你为什么不直接说

if (row.getAge() == null)
    row.setAge("DefaultValue");

?那只会将空值设置为“DefaultValue”。确保删除周围的代码!太

【讨论】:

    【解决方案2】:

    将此代码置于 if 条件中。

    if(row.getAge() == null){
      row.setAge("DefaultValue");
    }
    

    应该满足你想要的逻辑。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-10-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-06
      • 2018-08-15
      • 2017-09-27
      • 2015-12-04
      相关资源
      最近更新 更多