2013-10-11 3 views
-4

--- Большое спасибо за комментарии и подсказки, которые вы оставили! Я решил свою проблему! ---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
Strange Вещь: DefaultValue
Странная вещь: DefaultValue
Странная вещь: DefaultValue
Странная вещь: DefaultValue
Strange Thing: NEW


Если я удалю грань между "!!!!!" (Row.setAge ("DefaultValue");), то результат:
странная вещь: СТАРЫЙ
странная вещь: СТАРЫЙ
странная вещь: НОВАЯ
странная вещь: нулевая
странная вещь: СТАРЫЙ
странное дело : null
Strange Thing: NEW

только, к примеру. Последнее, что я хочу. Я просто хочу заменить «null» на «DefaultValue». Но когда я устанавливаю значение по умолчанию раньше (см. «!!!!!!»), результат неверен, и все значения, кроме последнего значения, имеют значение «DefaultValue».

У кого-нибудь есть объяснение? Я сижу здесь в течение 2 часов, и я могу басистски не понимать, что случилось. Спасибо заранее!

+9

Обучение использованию основ отладчика занимает менее 2 часов. –

+0

Вы изменяете состояние ссылки. Это ничего странного. Странно, что вам нужно написать Q/A вместо использования отладчика. –

+1

Вы также используете '==' на плавающей запятой. – chrylis

ответ

0

В конце для цикла, то почему бы вам просто не сказать

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

? Это приведет к тому, что значения null будут равны «DefaultValue». Убедитесь, что вы удалили код, окружающий! тоже

0

Поместите этот код в состояние if.

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

Должен служить логике, которую вы хотите.

Смежные вопросы