我一直在通過一本書中的示例,向您展示如何將字符串排列到所有可能的組合中,但由於我在編程方面還是一個初學者,所以我實際上無法理解代碼作品!以Java排列字符串。請解釋?
有人可以請分析我提供的代碼,並給我一個徹底的解釋,說明什麼都做,它是如何做到的?
非常感謝,
Alex。
class PermuteString{
String word;
int index;
PermuteString substringGenerator;
public PermuteString(String s){
word = s;
index = 0;
if(s.length() > 1){
substringGenerator = new PermuteString(s.substring(1));
}
}
public String nextPermutation(){
if(word.length() == 1){
++index;
return word;
}
else{
String r = word.charAt(index) + substringGenerator.nextPermutation();
if(!substringGenerator.morePermutations()){
++index;
if(index < word.length()){
String tailString = word.substring(0, index) + word.substring(index + 1);
substringGenerator = new PermuteString(tailString);
}
}
return r;
}
}
public boolean morePermutations(){
return index < word.length();
}
}
public class PermuteStringDemo {
public static void main(String[] args){
PermuteString p = new PermuteString("opyn");
while(p.morePermutations())
System.out.println(p.nextPermutation());
}
}
Java是一種清晰的聲明性語言。因此,它看起來確實如此(好吧,我們喜歡這麼想)。首先熟悉語言,您會更好地服務於您。如果您對代碼所採用的路徑感到困惑,可以嘗試一下 - 在調試器中跟蹤它,在那裏和那裏打印信息,在一張紙上寫一個字符串,然後手動應用算法,遍歷代碼並寫出一路上的字符串。 –
世界上有比Java源代碼更高級別描述的空間。雖然Java非常精確,但沒有其他非Java指導,在所有樹中很難看到森林。 –
這並不是因爲我對Java不熟悉 - 我比'絕對初學者'更接近'中級' - 這只是我無法理解遞歸在這個特例中如何工作。 – lukatar