【发布时间】:2012-10-07 09:15:26
【问题描述】:
我正在尝试生成数组并根据某些函数计算那里的值。我想将每个生成的数组保存到数组 List PQ 中。
重要的方法是: init: 启动一系列数组 calculate: 是在这个方法中计算数组测量值或值我想检查这个数组是否已经通过搜索 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;
}
谢谢
【问题讨论】:
-
@Abreal ..您的问题不是很清楚..您能解释一下您的问题的流程,以及您要做什么吗?你的 PQ 是多少??
-
"如何将数组作为值而不是引用传递" 首先,Java 中的一切都是按值传递的。总是。您不能“传递”数组或任何其他对象。您只能传递对对象的引用。并且是按值传递的
标签: java arrays static arraylist pass-by-value