Я хочу создать программу, которая бы не распутывала несколько слов.
Мне нужно попробовать все возможные комбинации слов, которые могут быть сформированы, а затем проверить, содержится ли он в переменной String с именем dict
.Java: Неизвестное число циклов 'for'
Мой код:
public class UnJumble
{
public static void main(String args[])
{
String dict = "cat, rat, mat dog, let, den, pen, tag, art,";
String t = "tra";
int l = t.length();
for(int i=0; i<l; i++)
{
char a=t.charAt(i);
t = t.replaceFirst(a+"","");
l--;
for(int j=0; j<l; j++)
{
char b = t.charAt(j);
t = t.replaceFirst(b+"","");
l--;
for(int k=0; k<l; k++)
{
char c = t.charAt(k);
if(dict.contains(""+a+b+c+","))
{
System.out.println("\'"+a+b+c+"\' found.");
break;
}
}
l++;
t = new StringBuilder(t).insert(j,b+"").toString();
}
t = new StringBuilder(t).insert(i,a+"").toString();
l++;
}
}
}
t
переменная содержит слово, чтобы быть не-перемешано.
С помощью этого кода, выход:
'rat' found.
'art' found.
Я думаю, что мне нужно так много for
петли, как там символы в строке t
.
Но я хочу, чтобы он мог размахивать словами неизвестной длины. Итак, как я могу это достичь?
Я пробовал поиск в Интернете и на SO. Я нашел ответы на SO, которые написаны на других языках программирования, которые я не понимаю.
Ищите рекурсивные методы;) –
Первый цикл с наименьшим из двух: сочетания максимальных слов, которые могут быть сделаны, т.е. n букв могут вызывать определенное количество комбинаций (комбинаторы поиска для вычисления) или количество словарных слов (в зависимости от того, что меньше). –
Вы просто хотите переставить 't'. См. http://stackoverflow.com/questions/4240080/generating-all-permutations-of-a-given-string – dejvuth