각 반복마다 다른 중첩 루프를 만들어 배열을 반복 할 수 있습니다.
for (String word1 : words) {
for (String word2 : words) {
for (String word3 : words) {
System.out.println(word1 + word2 + word3);
}
}
}
다음은 동일한 단어가 하나의 조합에 포함되는 것을 피하는 방법입니다.
for (String word1 : words) {
for (String word2 : words) {
if (!word1.equals(word2)) {
for (String word3 : words) {
if (!word3.equals(word2) && !word3.equals(word1)) {
System.out.println(word1 + word2 + word3);
}
}
}
}
}
여기는 역 추적을 사용하여 여러 길이가 가능한 클래스 버전입니다.
import java.util.ArrayList;
import java.util.List;
public class PrintAllCombinations {
public void printAllCombinations() {
for (String combination : allCombinations(new String[] { "A", "B", "C" })) {
System.out.println(combination);
}
}
private List<String> allCombinations(final String[] values) {
return allCombinationsRecursive(values, 0, values.length - 1);
}
private List<String> allCombinationsRecursive(String[] values, final int i, final int n) {
List<String> result = new ArrayList<String>();
if (i == n) {
StringBuilder combinedString = new StringBuilder();
for (String value : values) {
combinedString.append(value);
}
result.add(combinedString.toString());
}
for (int j = i; j <= n; j++) {
values = swap(values, i, j);
result.addAll(allCombinationsRecursive(values, i + 1, n));
values = swap(values, i, j); // backtrack
}
return result;
}
private String[] swap(final String[] values, final int i, final int j) {
String tmp = values[i];
values[i] = values[j];
values[j] = tmp;
return values;
}
}
임의의 방법을 사용하면 모든 조합이 보장되는 것은 아닙니다. 따라서 항상 모든 값을 반복해야합니다.
당신은 항상 3 문자열을 permute? –
이 경우의 문자열 수는 3이지만 더 많은 경우 루프가 유연한 경우 유용합니다. @ Pier-AlexandreBouchard – Karkool