我正在尝试生成数组并根据某些函数计算那里的值。我想将每个生成的数组保存到数组 List PQ 中。
重要的方法是: init:启动一系列数组 计算:是在此方法中计算数组测量值或值我想通过在 PQ 数组中搜索来检查该数组是否已经计算过,该数组将具有所有先前计算的数组。
糟糕的是,在每个阶段之后for (j=0;j<s;j++)
, sol[] 对象在数组列表中发生了一些变化,并且数组列表从未更新为新值。
就像 PQ.add(sol) 和 calculate(solution) 之间存在对象链接;
如何删除此链接,即按引用传递并将其转换为按值传递,以便我可以将新数组添加到 PQ Arraylist。
以另一种方式如何将数组作为值而不是引用传递? 这是我的代码:
ArrayList previous_values=new ArrayList();
ArrayList PQ=new ArrayList();
void init(int index)
{
int j;
for (j=0;j<s;j++)
{
r = j+1;
array [index][j]=r*index;
solution[j]=array[index][j];
}
f[index]=calculate(solution);}
double calculate(int sol[])
{
double r;
r=search_Previous(sol);
if(r==-1) {
PQ.add(sol);
r=sol[0]*5;
previous_value.add(r);
}
}
public double search_Previous(int[] arr)
{
double d=-1;
for(int i=0;i<PQ.size();i++)
{
if(equal_arr(arr,(int[])(PQ.get(i))))
{
return (double)previous_value.get(i) ;
}
}
return d;
}
public static boolean equal_arr(int[] list1, int[] list2) {
// Now test if every element is the same
for (int i = 0; i < list1.length; i++) {
if (list1[i] != list2[i])
return false; // If one is wrong then they all are wrong.
}
// If all these tests worked, then they are identical.
return true;
}
谢谢