java:使用递归生成两个数组的组合

k0pti3hp  于 2021-07-03  发布在  Java
关注(0)|答案(0)|浏览(352)

给定两个数组,其中数组1包含变量,数组2包含变量的值,我想得到这两个数组的所有可能组合,例如:

String[] arr = { "E", "A", "C" };
String[] val = { "true", "false" };

(数组arr可以容纳尽可能多的变量,val也可以)。期望输出:

E true A true C true
E true A true C false
E true A false C true
E true A false C false

E false A true C true
E false A true C false
E false A false C true
E false A false C false

我尝试了递归方法:

import java.util.*;

class Main {
  public static void main(String[] args) {
    String[] arr = { "E", "A", "C" };
    String[] val = { "true", "false" };
    printAll(arr, val, 0);
  }

  public static void printAll(String[] x, String[] y, int index) {
    if (x.length == 0) {
      return;
    }
    for (String d : x) {
      for (String val : y) {
        System.out.print(d + " " + val + " ");
        String[] arr2 = Arrays.copyOfRange(x, index + 1, x.length);
        printAll(arr2, y, index);
      }
    }
    System.out.println();
  }
}

但我得到的结果是:

E true A true C true C false 
A false C true C false 
C true C true C false 
C false C true C false 

E false A true C true C false 
A false C true C false 
C true C true C false 
C false C true C false 

A true A true C true C false 
A false C true C false 
C true C true C false 
C false C true C false 

A false A true C true C false 
A false C true C false 
C true C true C false 
C false C true C false 

C true A true C true C false 
A false C true C false 
C true C true C false 
C false C true C false 

C false A true C true C false 
A false C true C false 
C true C true C false 
C false C true C false

我希望能够将每个正确的行保存为 ArrayList 但首先我想弄清楚如何正确打印每一行。
编辑:第二个数组不是常量,它在每个变量之间不同:

String[] arr = { "E", "A", "C" };
String[] valE = { "true", "false" };
String[] valA = { "true", "false" };
String[] valB = { "set", "noset", "maybe" };

显然,这在递归中不起作用,因为我需要将每个数组与variables数组一起发送,我通过创建一个 Variables 对象,因此循环将是:

for (String d : x) {
      for (String val : d.getValues()) {...}
}

这与主要问题无关,我只是将问题简化为一个简单的情况,其中每个变量有两个可能的值。

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题