配列を生成し、関数に応じて値を計算しようとしています。生成された各配列を配列リスト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;
        }
ありがとう