Java - ArrayList的奇怪行为

时间:2013-10-11 20:03:50

标签: java arraylist

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

我有一个问题,这是我的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());
    }

如果我运行这个,我得到输出:
奇怪的事:DefaultValue
奇怪的事:DefaultValue
奇怪的事:DefaultValue
奇怪的事:DefaultValue
奇怪的事:DefaultValue
奇怪的事:DefaultValue
Strange Thing:NEW


如果我删除“!!!!!”之间的界限(row.setAge(“DefaultValue”);)然后结果是:
奇怪的事:旧的 奇怪的事:旧的 奇怪的事:新的 Strange Thing:null
奇怪的事:旧的 Strange Thing:null
奇怪的事:新的
仅举例来说。 最后一个是我想要的。我只想用“DefaultValue”替换“null”。但是当我之前设置默认值(参见“!!!!!!”)时,结果是错误的,除了最后一个值之外的所有值都具有值“DefaultValue”。

有人对此有解释吗?我坐在这里2个小时,我可以低音不明白什么是错的。 在此先感谢!

2 个答案:

答案 0 :(得分:0)

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

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

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

答案 1 :(得分:0)

将此代码置于if条件下。

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

应该提供你想要的逻辑。