2016-12-31 3 views
0

Ich muss eine Liste aller möglichen Kombinationen von Farben erstellen (ich habe 8 verschiedene Farben) und möchte die length der Ausgabe angeben, ohne in den Code zu gehen und eine weitere Schleife hinzuzufügen .Einfachere Möglichkeit, viele verschachtelte Schleifen zu machen

for (int s1 = 0; s1 < kinds.length; s1++) { 
     for (int s2 = 0; s2 < kinds.length; s2++) { 
      for (int s3 = 0; s3 < kinds.length; s3++) { 
       for (int s4 = 0; s4 < kinds.length; s4++) { 
        for (int s5 = 0; s5 < kinds.length; s5++) { 
         String[] guess = new String[length]; 
         guess[0] = colors[s1]; 
         guess[1] = colors[s2]; 
         guess[2] = colors[s3]; 
         guess[3] = colors[s4]; 
         guess[4] = colors[s5]; 
         Possible.add(guess); 

        } 
       } 
      } 
     } 
    } 
+0

Mögliche Duplikat [Erste jede mögliche Permutation eines Strings oder Kombination einschließlich wiederholter Zeichen in Java] (http://stackoverflow.com/questions/5113707/getting-every-possible-permutation-of-a- String-oder-Kombination-einschließlich-wiederholt) – ACascarino

+0

Sie brauchen nur 1 Schleife, genau wie Sie eine Uhr inkrementieren. – Enzokie

+0

Mögliches Duplikat von [Combinatorics: Generiere alle "states" - Array-Kombinationen] (http://stackoverflow.com/q/9632677/5221149) – Andreas

Antwort

0

Sie können Rekursion statt Schleife verwenden. Die generelle Idee ist, alle möglichen Kombinationen aus den ersten möglichen Farben mit den Kombinationen des Restes zu erstellen.

private static List<String> possibles = new ArrayList<>(); 

private static void combi(char[] arr, char[] out, int start, int end, int index, int length) { 
    if (index == length) { 
     possibles.add(new String(out)); 
     return; 
    } 

    for (int i = start; i <= end && end - i + 1 >= length - index; i++) { 
     out[index] = arr[i]; 
     combi(arr, out, i + 1, end, index + 1, length); 
    } 
} 

private static void compute(char[] colors, int length) { 
    char[] output = new char[length]; 
    combi(colors, output, 0, colors.length - 1, 0, length); 
} 

public static void main(String[] args) { 
    char[] colors = {'a', 'b', 'c', 'd', 'e'}; 
    int length = 3; 
    compute(colors, length); 

    for (String possible : possibles) { 
     System.out.println(possible); 
    } 
} 
+0

Könnte jemand bitte das ein wenig mehr erklären. –

+0

@KaminPallaghy hat meine Antwort aktualisiert. Lass es mich wissen, wenn es noch nicht klar ist. – pt2121

+0

Danke. Das ist viel einfacher –

Verwandte Themen