2017-04-19 64 views
1
if (value.compareTo(elementData[size]) >= 0) { 
    elementData[size + 1] = value; 
    size++; 
} else if (value.compareTo(elementData[0]) <= 0) { 
    for (int i = size; i >= 0; i--) { 
     elementData[i + 1]= elementData[i]; 
    } 

    elementData[0] = value; 
    size++; 
} 

的第一個if語句應該從返回的compareTo正數。我已經調試並確認它確實返回了一個正數,但它並沒有進入該區塊。如果聲明條件不通過,但應該是!? (JAVA)

我比較,像這樣的「STR1」「STR2賽車」 ......等等,直到我得到它工作正常「str10」,並有比較爲「STR9」字符串。這是說「str10」比「str9」還要有意義嗎?

它每10次發生一次。所以我的數組看起來像[str0,str1,str10 ... str19,str2,str20,str21,... str29..etc]

+1

如果'value.compareTo(elementData中[大小])'返回一個值大於0,則它會** **進入塊。如果它沒有輸入塊,那麼該值小於0.「value」和「elementData」的類型是什麼? –

+2

你不知道1是在9之前嗎? – stark

+0

值和元素數據都是可比較的對象。 – igork

回答

0

您似乎在比較每個String的詞典形式,這意味着str10會置於str9之前。您需要實現使用Alphanum算法的自定義比較器,如here所示。

2

考慮使用compareTo(String anotherString)string值的方式進行比較。

比較兩個字符串按字典順序。該比較基於字符串中每個字符的統一碼值 。由此String對象表示的字符序列 按字典順序與參數字符串表示的 字符序列進行比較。如果此字符串對象按照字典順序排列在參數字符串 之前,結果爲 負整數。如果此字符串 對象按照字典順序跟隨參數字符串,則結果爲正整數。如果字符串相等,結果爲 ;當 等於(Object)方法將返回true時,compareTo返回0。

,你可以看看會發生什麼時"str10"相比"str9"'1'"str10"的Unicode值是小於'9'"str9"的Unicode值這就是爲什麼你得到的結果是"str10"大於"str9"

你可以看看的Alphanum算法作爲替代。

+1

爲什麼downvote? –

+0

我不知道^^。 –