首页 > 解决方案 > 灵活数量的 for 循环 - Java

问题描述

我正在寻找一种方法来使用灵活数量的 for 循环或一些可以做同样事情的解决方案。基本上我希望一个变量在每个循环中从 0 到 100 并遍历所有组合。for 循环是嵌套的,所以如果我正在为两个代理寻找解决方案,我有:

for(int i = 0; i<=100; i++){
 for(int j = 0; j<=100, j++){
   //do some stuff with i and j
 }
}

但我事先不知道需要多少代理,所以我正在寻找一种灵活的方法来获得相同的结果。这可能是一个非常简单的问题,但我找不到给我一个有效解决方案的威胁。

编辑:有人向我指出这个问题还不够清楚,我将尝试展示我想要实现的目标:

假设我有 n 个代理,如果 n == 1 那么我需要这个:

for(int j = 0; j<=100, j++){
       //do some stuff with j
}

对于 n == 2 我想要:

for(int i = 0; i<=100; i++){
     for(int j = 0; j<=100, j++){
       //do some stuff with i and j
     }
    }

对于 n == 3 另一个用于查看这些现有的等等,但它需要灵活,因为用户被要求输入 n 并且可以输入任何整数。//EndEDIT 我希望这能让它更清楚

先感谢您!

标签: javafor-loop

解决方案


我认为实现这一目标的最简单方法是递归。

假设您希望每个范围具有相同的限制(即 i、j、k 等从 0..100 开始),您可以这样做:

void recursive(List<Integer> values, int depth) {
  if (values.size() == depth) {
    // Do the thing you want to do with the values, i.e. the "innermost loop".
  } else {
    // This is intentionally Integer, so that remove removes that value, not the element at that index.
    for (Integer a = 0; a <= 100; ++a) {
      values.add(a);
      recursive(values, depth);
      values.remove(a);
    }
  }
}

虽然列表中的值少于depth,但这会将范围中的每个值依次添加到列表中,并递归。

一旦列表中有足够的值,它就会做你想做的“事情”。该列表将包含depth值,您可以使用 访问单个值values.get(i)


推荐阅读