2015-03-02 100 views
0

我閱讀了一個包含城市及其人口的文件,我嘗試使用選擇類別按字母順序對城市進行分類。 問題是,由於某種原因,它以奇怪的方式排序。 「排序」列表的順序是「ABDCEFHG ...」我試着跟着它,但我無法理解它在哪裏混亂。這是代碼:選擇分類字符串

//Selection 
    for (int i = 0; i < cities.size() - 1; i++) 
    { 
     int minPos = i; 
     for (int j = i + 1; j < cities.size(); j++) 
     { 
      if (cities.get(j).compareToIgnoreCase(cities.get(minPos)) < -1) 
       minPos = j; 
     } 
     swap(cities, minPos, i); 
    } 
    System.out.print("\nSelection: "); 
    for(int i = 0; i < cities.size(); i++) 
     System.out.print(cities.get(i) +"|"); 

private static void swap(ArrayList <String> a, int i, int j) 
{ 
    String temp = a.get(i); 
    a.set(i, a.get(j)); 
    a.set(j, temp); 
} 

任何想法有什麼不對?

感謝

+3

您是否嘗試過使用'... <0'而不是'... <-1'? – August 2015-03-02 23:22:45

+3

你爲什麼使用<-1?你應該使用<0 – thermite 2015-03-02 23:23:06

+0

是的,這是問題。這是我第一次使用字符串比較,所以我對它有點新。謝謝! – Nik 2015-03-02 23:26:49

回答

0

正如其他人所說的,你的問題是幾乎可以肯定你的... < -1比較,這是比較的情況下基本上是沒有意義的。如圖Comparable記載,在Java比較通常通過返回

負整數,零或正整數,根據此對象是比指定的對象小於,等於或大於完成。

String.compareToIgnoreCase()遵循相同的規則:

Returns: 
    a negative integer, zero, or a positive integer as the specified 
    String is greater than, equal to, or less than this String, ignoring 
    case considerations. 

這些合同故意說沒有什麼的負或正數可能,因此實現能夠做什麼是最容易。許多實現將明確地返回-1,01,但包括String中的那些的其他實施例使用減法作爲快捷方式,返回正在比較的項目之間的差異,例如, x.compareTo(y)確實return x-y。如果xy相同,則結果爲0,否則如果x較小則返回負數,如果x較大則返回正數。

總之,您必須始終使用0作爲比較點。