配列を生成し、関数に応じて値を計算しようとしています。生成された各配列を配列リストPQに保存したいと思います。
重要なメソッドは次のとおりです 。init:一連の配列を開始し ます。calculate:このメソッドで配列の測定値または値を計算します。以前に計算されたすべての配列を含むPQ配列を検索して、この配列がすでに計算されているかどうかを確認します。
ひどいことに、ステージごとにfor (j=0;j<s;j++)
sol []オブジェクトが配列リストで何らかの形で変更され、配列リストが新しい値で更新されることはありませんでした。
これは、PQ.add(sol)とcalculate(solution)の間にオブジェクトリンクがあるようなものです。
このリンクを削除する方法、つまり参照渡しと値渡しに変換して、新しい配列をPQArraylistに追加できるようにする方法。
別の方法では、参照ではなく値として配列を渡す方法は? これは私のコードです:
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;
}
ありがとう