1

要するに、Java/C# で、さまざまな値を含むさまざまなセットに基づいて、考えられるすべてのバリエーションを生成する方法を探しています。例: 名前のセットがあるとしましょう:

 -Max, Jack, Roger

動詞の 2 番目のセット

-Loves, hates, knows

プログラミング言語の 3 番目のセットは単なる例ですが、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 に答える