2011-09-25 99 views
0

在我的教科書中有一個關於如何對字符串數組進行排序的例子,但我很難理解代碼的邏輯。我們有以下的數組:在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運行通過:在所以非常「

好的。就像我說的,我在這段代碼中的邏輯有一些問題。如果我們通過循環的第一次,這是我所看到的情況:

  1. 我們有:Comparable value = compTab[1]。這意味着value =「in」。

  2. 我們用this = next(which == 1)開始內循環。因此,Java只會經歷一次內部循環。事實證明,第一次運行value.compareTo(compTab[this-1])確實小於0.因此,我們有:compTab[1] = compTab[0]。這意味着過去在位置[1]的單詞現在被替換爲過去位於[0]的單詞。因此,我們現在在數組[1]的位置上有「so」這個詞。

  3. 該方法的下一步是:compTab[this] = value。這是我感到困惑的地方。這告訴我,因爲這= 1,我們在這裏得到compTab[1] = value。但是,在方法的前面我們定義了value =「in」。這告訴我陣列中的位置[1]再次呈現單詞「in」。

  4. 我看到這個問題的方法,最後打印出來然後應是:

「1.運行通過:所以在非常每做」。換句話說,我遵循代碼邏輯的方式,數組的最終打印輸出與實施方法之前的輸出完全相同!很明顯,我的邏輯中有一部分是不正確的。例如 - 我不知道原來位置[1]中的單詞現在位於[0]的位置。如果有人能幫我解釋一下,我會非常感激!

+6

請不要做:'INT這一點;' – Howard

+1

使用'this'作爲變量名是如果不是解析器本身來迷惑人閱讀你的代碼,一個很好的方式。 –

+0

謝謝。就像我提到的,這實際上不是我的代碼。它來自我的教科書。 – Kristian

回答

1

的問題是以下語句內:

該方法中的下一個步驟是:compTab [此] =值。這是我 混淆。這告訴我,因爲這= 1,我們在這裏得到 compTab [1] =值。但是,在該方法的較早部分,我們定義了value = 「in」。這告訴我陣列中的位置[1]再次假定 單詞「in」。

既然你通過循環跑一次(看到你的發言2),也this--被執行一次,因此this==0

+0

非常感謝:)。我不知道在內部循環執行後,變量實際上是否降值。但是,當然,最終的印刷品非常有意義! – Kristian

1
public class A { 

static String Array[]={" Hello " , " This " , "is ", "Sorting ", "Example"}; 
String temp; 


public static void main(String[] args) 

{  

for(int j=0; j<Array.length;j++) 
{ 
    for (int i=j+1 ; i<Array.length; i++) 
    { 
     if(Array[i].trim().compareToIgnoreCase(Array[j].trim())<0) 
     { 
      String temp= Array[j]; 
      Array[j]= Array[i]; 
      Array[i]=temp; 


     } 
    } 

    System.out.print(Array[j]); 
} 
} 

}

相關問題