在我的教科書中有一個關於如何對字符串數組進行排序的例子,但我很難理解代碼的邏輯。我們有以下的數組:在Java中對字符串數組進行排序
String[] words = {"so", "in", "very", "every", "do"};
的方法本身是如下:
public static void sortArray(Comparable[] compTab) {
for (int next=1; next < compTab.length; next++) {
Comparable value = compTab[next];
int this;
for (this = next; this > 0 && value.compareTo(compTab[this-1]) < 0; this--) {
compTab[this] = compTab[this-1];
}
compTab[this] = value;
writeArray(next + " run through: ", compTab);
}
}
這最後writeArray
呼叫在下面的文本結果被印刷,用於通過第一奔跑:「1運行通過:在所以非常「
好的。就像我說的,我在這段代碼中的邏輯有一些問題。如果我們通過循環的第一次,這是我所看到的情況:
我們有:
Comparable value = compTab[1]
。這意味着value =「in」。我們用
this = next
(which == 1)開始內循環。因此,Java只會經歷一次內部循環。事實證明,第一次運行value.compareTo(compTab[this-1])
確實小於0.因此,我們有:compTab[1] = compTab[0]
。這意味着過去在位置[1]的單詞現在被替換爲過去位於[0]的單詞。因此,我們現在在數組[1]的位置上有「so」這個詞。該方法的下一步是:
compTab[this] = value
。這是我感到困惑的地方。這告訴我,因爲這= 1,我們在這裏得到compTab[1] = value
。但是,在方法的前面我們定義了value =「in」。這告訴我陣列中的位置[1]再次呈現單詞「in」。我看到這個問題的方法,最後打印出來然後應是:
「1.運行通過:所以在非常每做」。換句話說,我遵循代碼邏輯的方式,數組的最終打印輸出與實施方法之前的輸出完全相同!很明顯,我的邏輯中有一部分是不正確的。例如 - 我不知道原來位置[1]中的單詞現在位於[0]的位置。如果有人能幫我解釋一下,我會非常感激!
請不要做:'INT這一點;' – Howard
使用'this'作爲變量名是如果不是解析器本身來迷惑人閱讀你的代碼,一個很好的方式。 –
謝謝。就像我提到的,這實際上不是我的代碼。它來自我的教科書。 – Kristian