Некоторое время назад я работал над программой, которая хэшировала значения в хеш-таблицу (я не помню специфику, а сами специфика не имеют отношения к рассматриваемому вопросу).Во всяком случае, у меня был следующий код как часть метода "recordInput":
tempElement = new hashElement(someInt);
while(in.hasNext() == true)
{
int firstVal = in.nextInt();
if (firstVal == -911)
{
break;
}
tempElement.setKeyValue(firstVal, 0);
for(int i = 1; i<numKeyValues;i++)
{
tempElement.setKeyValue(in.nextInt(), i);
}
elementArray[placeValue] = tempElement;
placeValue++;
} // close while loop
} // close method
Эта часть кода давала мне очень неприятную ошибку - независимо от того, как я ее определил, независимо от того, какой вводЯ дал программу, она всегда будет производить массив, полный только одно значение - последнее.
Проблема, как я позже определил, заключалась в том, что, поскольку я не создал переменную tempElement в цикле, а также потому, что значения не присваивались elementArray[]
до окончания цикла - каждый членбыло определено скорее как "tempElement" - когда цикл завершился, каждый слот в массиве был заполнен последним значением, которое принял tempElement.
Я смог исправить эту ошибку, переместив объявление tempElement в пределахпока цикл.Мой вопрос к вам, Stackoverflow, заключается в том, существует ли другой (читай: лучше) способ избежать этой ошибки, сохраняя объявление переменной tempElement вне цикла while.