1

简而言之,我正在寻找一种在 Java/C# 中基于包含不同值的不同集合生成所有可能变化的方法。例如:假设我们有一组名称:

 -Max, Jack, Roger

第二组动词

-Loves, hates, knows

第三套编程语言只是一个例子,但我们可能有 10 套

-Java, C#, Python, Visual Basic, C++

我想要的是一种生成包含所有属性并具有所有值的所有可能变体的方法,例如输出应该是:

Max loves Java
Jack loves Java
Roger loves Java
Max hates Java
Jack hates Java
Roger hates Java
Max knows Java
Jack knows Java
Roger knows Java
Max loves C#
Jack loves C# 
Roger loves C#
and so on... this will generate 45 variations if I am not wrong at the end

任何人都可以帮忙吗?我相信一个类似的更简单的例子是,如果您想在某些服装店中生成具有不同尺寸、颜色和材料的产品变体,并且您想要所有变体。

4

1 回答 1

4
String[] names={"Max", "Jack", "Roger"};
String[] verbs={"Loves", "hates", "knows"};
String[] languages={"Java", "C#", "Python", "Visual Basic", "C++"};
for(String name:names)
   for(String verb:verbs)
      for(String language:languages)
         System.out.println(name+" "+verb+" "+language);

编辑:

哦,我懂了 。我误解了这个问题。您可以使用递归的魔力来解决这个问题。这就是你想要的:

public static void main(String[] args) {
    String[][] sets={
            {"Max", "Jack", "Roger"},
            {"Loves", "hates", "knows"},
            {"Java", "C#", "Python", "Visual Basic", "C++"},
    };
    combine(sets,0,"");
}

public static void combine(String[][] list,int index,String upperText)
{
    if(index==list.length)return;
    for(String i:list[index]){
        combine(list,index+1,upperText+i);
        if(index==list.length-1){
            System.out.println(upperText+i);
        }
    }
}
于 2013-06-06T16:17:15.987 回答