2012-10-07 315 views
1

我正在尝试生成数组并根据某些函数计算值。我想将每个生成的数组保存到数组List PQ中。将对象传递给Arraylist

的重要方法是: INIT:发起系列阵列 的计算:是计算在该方法中阵列测量或值I要检查,如果这个阵列已经由在搜索计算PQ数组,它将具有所有先前计算的数组。

厉害,每一个用于阶段for (j=0;j<s;j++)后的溶胶[]如何在数组列表和从未用新值更新数组列表改变的对象一些。

它就像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; 
     } 

感谢

+0

@Abreal ..你的问题不是很清楚..你能解释一下你的问题的流动,和你正在尝试做的?你的PQ是什么? –

+0

“如何将数组作为值传递给参数”首先,Java中的所有内容都是按值传递的。总是。你不能“传递”一个数组或其他任何对象。您只能传递对象的引用。它是通过值 – newacct

回答

2

希望我得到你的问题

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

您需要复制数组。使用System.arraycopy(sourceArray, 0, targetArray, 0, sourceArray.length);

+0

是的,它的工作:)非常感谢你 – Abreal

0
double calculate(int sol[]) 
{ 


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


    PQ.add(sol); 
} 

顺便说一句,你没有关闭if语句

+0

好吧,我关闭了如果但我的主要问题是如何传递数组作为值而不是参考? – Abreal

+0

问题不存在 –

+0

你是什么意思?运行后,我想在PQ数组列表(23,3,5,6),(5,7,88,9)等中有这样的事情,但我在PQ数组列表中只有一个结果(55, 6,7,8),我认为这是因为通过参考?有关这个的任何线索? – Abreal