1

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

ありがとう

4

2 に答える 2

2

私はあなたの質問を願っています

.. how to pass array as value instead of reference ?

配列をコピーする必要があります。使用するSystem.arraycopy(sourceArray, 0, targetArray, 0, sourceArray.length);

于 2012-10-07T11:11:57.877 に答える
0
double calculate(int sol[]) 
{


    double r;
    r=search_Previous_f(sol);
 if(r==-1)  {


     PQ.add(sol);
}

ところで、ifステートメントを閉じていません

于 2012-10-07T09:17:41.043 に答える