Я написал этот код, который должен печатать все возможные строки (длина 4) комбинации (a, b, c, d)
с двумя условиями:
a
всегда должно следовать b
a
и d
не могут быть в одной строке
Когда я запускаю следующий код, он дает мне "
aaaa
Exception in thread "main" java.lang.StackOverflowError
" ... Я не уверен, что я сделал не так. Спасибо за вашу помощь !
static void printAllKLength(char[] set, int k) {
int n = set.length;
printAllKLengthRec(set,"", n, k);
}
static void printAllKLengthRec(char[] set, String prefix, int n, int k) {
if (k == 0) {
if (aFollowsB(prefix) && hasOnlyAOrD(prefix) == true) {
System.out.println(prefix);
return;
}
}
for (int i = 0; i < n; ++i) {
String newPrefix = prefix + set[i];
printAllKLengthRec(set, newPrefix, n, k - 1);
}
}
//Method for "a" always have to follow "b"
public static boolean aFollowsB(String str) {
return str.indexOf('a') > str.indexOf('b');
}
//Method for "we can't have a and d in the same string"
public static boolean hasOnlyAOrD(String str) {
return str.indexOf('a') == -1 || str.indexOf('d') == -1;
}
//Main method
public static void main(String[] args) {
char[] set1 = { 'a', 'b', 'c', 'd' };
int k = 4;
printAllKLength(set1, k);
}}