java에서 단어 해독기를 만들고 있습니다. 지금 나는 3 개 이상의 글자 (반복 없음)가있는 단어에서 선택된 3 글자의 모든 재 배열을 인쇄 할 수있는 프로그램을 가지고있다.중첩 된 루프의 수 가변
[[abc 방송, ABD, ACB, ACD, ADB, ADC, 혈중 알코올 농도, 나쁜, BCA, BCD, BDA, BDC, 택시, CAD : 매개 변수가 ABCD 경우에 따라서, 예를 들어,이 인쇄됩니다 , cba, cbd, cda, cdb, dab, dac, dba, dbc, dca, dcb]]
순열로 2D 배열 목록을 채울 것입니다. 현재 2D 배열에는 3 개의 문자에 대한 순열이 들어있는 배열이 하나만 있습니다. 2 차원 배열은 1 문자, 2 문자, 3 문자 등의 순열을위한 배열을 가지고 단어의 길이에서 멈추고 싶습니다. 문제는이 작업을 수행하기 위해 여러 개의 중첩 된 루프가 필요하다는 것입니다. 3 글자 순열의 경우, 3 중첩 된 for 루프가 있습니다. 각각은 매개 변수의 문자를 순환합니다.
public static void printAllPermuations(String word)
{
int len = word.length();
ArrayList<String> lets = new ArrayList<String>();
//this array of letters allows for easier access
//so I don't have to keep substringing
for (int i = 0; i < len; i++)
{
lets.add(word.substring(i, i + 1));
}
ArrayList<ArrayList<String>> newWords = new ArrayList<ArrayList<String>>();
newWords.add(new ArrayList<String>());
for (int i = 0; i < len; i++)
{
for (int j = 0; j < len; j++)
{
for (int k = 0; k < len; k++)
{
if (i != j && i != k && j != k)
//prevents repeats by making sure all indices are different
{
newWords.get(0).add(lets.get(i) + lets.get(j) + lets.get(k));
}
}
}
}
System.out.println(newWords);
}
다른 게시물을 살펴본 결과 재귀가이를 해결할 수 있다고 들었습니다. 하지만 어떻게 구현할지 모르겠습니다. 그리고 내가 이해하지 못하는 몇 가지 복잡한 해결책을 보았습니다. 재귀가 포함되는지 여부와 관계없이 가장 간단한 해결 방법은 입니다.
if (i! = j && i! = k && j! = k)이 것 같습니다. wrong.There loopFunction()에 j 및 k 지역 변수가 없습니다. – Algorithmist
Woops에 약간의 복사/붙여 넣기가 있습니다. 또한 꼬리 재귀 최적화 (Java 8의 경우)에 이점이 있습니까? 아니면 한 단계 더 내려야합니까? – DrYap
당신은'newWords.get (...). add (...);'코드를 작성했습니다. add() 부분에는 문자들의 콜렉션이 필요합니다. 나는 모든 편지를 모으는 방법을 모른다. 누구든지 저를 도울 수 있습니까? – Muuz