java arraylist会覆盖现有元素

时间:2012-11-23 10:07:08

标签: java arraylist overwrite

我似乎有一个令人沮丧的问题 - 我的arraylist的一个元素被覆盖。我在许多论坛上看了很多帖子,但我还没有设法解决它。 :chomp:

在我的程序中(实际上是用Java实现的FBDK功能块算法),我想将输入变量(PART)的数据存储到out变量数组(PART_array)的元素中。此过程将多次发生(事件发生),因此必须将变量存储在多个数组元素中。

问题是PART_array的元素被最后一个条目覆盖。例如,对于第一个事件发生,PART_array [] = [“1”,“”,“”,“”,“”,“”]。然后,第二次出现,而不是PART_array [] = [“1”,“2”,“”,“”,“”,“”],我找到PART_array [] = [“2”,“2”, “”,“”,“”,“”“ - 因此显示覆盖。我已经意识到对于PART_ARRAY ArrayList的存储已经发生了覆盖。我认为通过重新初始化(p = new Part())问题将得到解决......显然不是。

任何帮助解决此问题的人都将非常感激!代码如下:

public class STORE_TO_ARRAY extends fb.rt.FBInstance {

    public ArrayList<Part> PART_ARRAY = new ArrayList<Part>();
    Part p = new Part();

    /** The default constructor. */
    public STORE_TO_ARRAY() {
       super();
    }

    /** ALGORITHM REQ IN Java*/ -- a method called in the program
    public void alg_REQ() {
        int ct = 0;
        ct = current_task;
        if (ct <= NumOfTasks) {
            //write received input data to output variable array elements
            //this is where the problem occurs!!!!
            p.setPart(PART); //set value of Part
            PART_ARRAY.add(ct-1,p); //adding to arraylist
            Part p = new Part(); //trying to reinitialise the object    
        }
    }
}

Part的类文件如下:

public class Part {
    WSTRING part;
    void setPart(WSTRING part) {
        this.part = part;
    }
    WSTRING getPart() {
        return part;
    }
}

1 个答案:

答案 0 :(得分:0)

下面的代码创建一个局部变量(在下一行中,它超出范围并在使用之前消失),而不是为类变量赋值一个新值(我假设你是'你'重新尝试)。

Part p = new Part(); //trying to reinitialise the object

尝试用

替换它
p = new Part(); //trying to reinitialise the object

另外,一个体面的IDE(如NetBeans)应该会给你一个关于创建一个隐藏类变量的局部变量的警告。