【问题标题】:Java - fill list values with other list as function parameter using recursionJava - 使用递归将其他列表作为函数参数填充列表值
【发布时间】:2019-08-29 15:06:51
【问题描述】:

在我的 java 函数中,我想使用一个列表作为参数,例如 List 1 = (a,b,c)。 其中每个值都是来自另一个列表的值,List 2 = (1, 2, 3)。现在我想用所有可能的组合来调用我的函数来填充它。

如 a=1, b=1, c=1; a=1,b=2,c=1; a=1、b=3、c=1 等

问题是每次调用函数时列表长度都会更改。

通常我会使用两个 for 循环,或者一个简单的递归函数。 但我不知道如何准确处理不断变化的列表长度。也许我的问题很广泛,我的问题是不知道如何只更改列表中的一个值,直到调用每个组合。

我想象的函数看起来像这样: (我知道带有 for 循环的函数不起作用,我必须使用迭代器)

List 1 = (a,b,c);
List 2 = (1,2,3);
list1.set(a, 1);
list1.set(b, 1);
list1.set(c, 1);

functionFillList(List list1){
  for(Element e : list1){
   //do something
   //in some cases add elements to list2
  }
  //change one value of list1
  functionFillList(list1);
 //if every combination was called -> end function
}

【问题讨论】:

  • 列表有什么变化?是在末尾添加或删除了新元素,还是在中间或前面更新或更改了一些元素?如果您为列表 1 的一个元素访问了列表 2 的所有元素,然后将一个元素添加到列表 2,您是否还需要计算那些缺失的排列?以及如何/为什么更改列表?
  • 包含组合值的列表 2 在函数本身中发生了更改。使用迭代器,您只需要将元素本身添加到迭代器中。最后我可能会使用迭代器,但为了简单起见,我在这里使用了 for 循环。
  • 你想要的最终结果是什么
  • 我想看看这个组合是否满足某个条件。然后在list2中添加一个新元素。

标签: java list recursion


【解决方案1】:

使用循环改变列表数据会抛出并发修改错误,使用Iterator而不是循环改变列表数据。迭代器允许修改数据。

void functionFillList(List list1){
      Iterator<String> iter = list1.iterator();
      while(iter.hasNext()){
       //do something
      }
      //change one value of list1
      functionFillList(list1);
     //if every combination was called -> end function
    }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-21
    • 2021-12-25
    • 2011-09-30
    • 2022-01-06
    相关资源
    最近更新 更多