2013-05-10 25 views
3

我正在研究一些學校項目的排序算法,並且我遇到了問題。 下面的代碼它沒有對數組進行排序,我已經嘗試了與數組數組相同的代碼(唯一的變化是在if),它正在工作,但現在與String數組和使用compareTo它不工作它的只是放項目以「隨機」順序排列。Java:字符串數組的選擇排序

public static void selectionSortISBN(Book pin[], int booksCounter) { 
    for (int x = 0; x < booksCounter; x++) { 
     int minIndex = x; 
     for (int y = x + 1; y < booksCounter; y++) { 
      if (pin[y].getISBN().compareTo(pin[minIndex].getISBN()) < 0) { 
       minIndex = y; 
      } 
     } 
     Book temp = pin[x]; 
     pin[x] = pin[minIndex]; 
     pin[minIndex] = temp; 
    } 
} 

編輯:

我改變了我的內心爲這樣:

 for (int y = x + 1; y < booksCounter; y++) { 
      int com=pin[y].getISBN().compareTo(pin[minIndex].getISBN()); 
      System.out.println(pin[y].getISBN()+" "+pin[minIndex].getISBN()+" = "+com); 
     } 

和我得到的輸出是這

1537 1485 = 1 
596 1485 = 4 
1164 1485 = -3 
909 1485 = 8 
596 1537 = 4 
1164 1537 = -4 
909 1537 = 8 
1164 596 = -4 
909 596 = 4 
909 1164 = 8 
+0

代碼看起來沒問題。你檢查過輸入值了嗎?特別是,我會刪除'booksCounter'並使用'pin.length'而不是 – SJuan76 2013-05-10 12:30:18

+1

您確定訂單是「隨機」嗎?你能發表一個輸入和輸出的例子嗎? – pcalcao 2013-05-10 12:32:34

+1

您正在按字母數字順序排序,而不是標題,您知道嗎?他們真的是「隨機」按ISBN排序嗎? 「getISBN」是做什麼的?也許這個函數不會返回正確的值。 – svinja 2013-05-10 12:34:46

回答

4

這是正常工作,你所犯的錯誤是你期望「596」在「1485」之下,w如果不是這樣,你就把它們分類爲字符串,596> 1485就像BA> AAAABA。如果要以字母數字形式比較數字,請添加前導零。

+3

做算法。它可能會更好地將它們轉換爲數字。 – Dukeling 2013-05-10 12:40:19

+0

現在是看到我的錯誤,謝謝 – SteveL 2013-05-10 12:41:04

0

如果您只處理數字,則將字符串數組轉換爲數組數組