簡體   English   中英

在Java中對字符串數組進行排序

[英]Sorting string array in 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。貫穿:in so every every do”

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

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

  2. 我們用this = next (== 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]。 如果有人能幫我解釋一下,我將非常感激!

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]);
 }
}

}

該問題在以下聲明中:

該方法的下一步是:compTab [this] = value。 這是我感到困惑的地方。 這告訴我,由於這= 1,我們在這里獲得compTab [1] = value。 但是,在方法的早期我們定義了value =“in”。 這告訴我數組中的位置[1]再次假定單詞“in”。

既然你經歷了一次循環(參見你的陳述2),那么這個this--也被執行了一次,因此this==0

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM