我似乎有一个令人沮丧的问题 - 我的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;
}
}
答案 0 :(得分:0)
下面的代码创建一个局部变量(在下一行中,它超出范围并在使用之前消失),而不是为类变量赋值一个新值(我假设你是'你'重新尝试)。
Part p = new Part(); //trying to reinitialise the object
尝试用
替换它p = new Part(); //trying to reinitialise the object
另外,一个体面的IDE(如NetBeans)应该会给你一个关于创建一个隐藏类变量的局部变量的警告。