【问题标题】:pass object to Arraylist将对象传递给 Arraylist
【发布时间】: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


【解决方案1】:

希望我能得到你的问题

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

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

【讨论】:

    【解决方案2】:
    double calculate(int sol[]) 
    {
    
    
        double r;
        r=search_Previous_f(sol);
     if(r==-1)  {
    
    
         PQ.add(sol);
    }
    

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

    【讨论】:

    • 好的,我关闭了 if 但我的主要问题是如何将数组作为值而不是引用传递?
    • 什么意思?运行后我想在 PQ 数组列表 (23,3,5,6),(5,7,88,9) 等中有这样的东西,但我在 PQ 数组列表中只有一个结果 (55, 6,7,8) 我认为是因为引用传递?有什么线索吗?
    • @Abreal.. Java 中的所有内容都是按值传递的。那么,您所说的第一条评论究竟是什么意思??
    • sol[] 和解决方案数组之间存在某种链接或指针,这导致 PQ 中总是有一个可变的结果(输出时只有一个数组),而不是向其中添加新数组?希望现在清楚了,谢谢,如果不是因为通过引用传递那么如何以任何方式解决它
    • @Abreal 您的方法名称不匹配..您正在调用calculateFunction,而您有calculate 方法..
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-06-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-07
    相关资源
    最近更新 更多