【发布时间】:2020-12-06 15:23:44
【问题描述】:
给定两个数组,其中数组一包含变量,数组二包含变量的值,我想获取这两个数组的所有可能组合,例如:
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 对象来实现这一点,因此循环将是:
for (String d : x) {
for (String val : d.getValues()) {...}
}
这与主要问题无关,我只是将问题简化为每个变量都有两个可能值的简单情况。
【问题讨论】:
标签: java arrays combinations permutation