简而言之,我正在寻找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
有人可以帮忙吗? 我相信一个类似的更简单的例子是,如果你想在一些服装店生成不同尺寸,颜色和材料的产品,你想要所有的变化。
答案 0 :(得分: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);
}
}
}