变量赋值和循环

时间:2010-06-07 15:25:47

标签: java loops variable-assignment

前段时间,我正在开发一个程序,将值散列为哈希表(我不记得具体内容,而且具体内容与手头的问题无关)。无论如何,我将以下代码作为“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的最后一个值。

我能够通过在while循环中移动tempElement的声明来修复此错误。我的问题,Stackoverflow,是否有另一种(读取:更好)的方法来避免这个错误,同时保持tempElement的变量声明在while循环之外。

3 个答案:

答案 0 :(得分:2)

为什么要将变量声明保留在while循环之外?无论如何,只要你每次都将它分配给一个新的hashElement:

hashElement tempElement;
while (/*...*/) {
    tempElement = new hashElement();
    //...
但是,这肯定不是“更好”。一般来说,尽可能缩小范围。

答案 1 :(得分:1)

这不是关于变量的声明,而是关于您创建的对象。 java中的数组只包含引用到对象,所以如果你真的想在数组中有不同的对象,你需要在循环的某个地方用new创建它们。

tempElement = new WhateverClass();

答案 2 :(得分:0)

Element tempElement;

while(condition){
    tempElement = new HashElement();

    //do more stuff

    elementArray[index] = tempElement;
}