2017-04-19 9 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から正の数を返す必要があります。私はデバッグして、それがブロックに入ることはありませんが、正の数を返すことを確認しました。文の条件が合格ではありませんが、

"str1" "str2" ...のような文字列を比較しています。 "str10"に到達して "str9"と比較するまでうまく動作します。それは "str10"は "str9"よりも小さいと言っていますが、これは意味がありますか?

10回の繰り返しごとに発生します。だから私の配列は[str0、str1、str10 ... str19、str2、str20、str21、str21、... str29..etc]

+1

'value.compareTo(elementData [size])'が0より大きい値を返す場合、**はブロックに入ります**。それがブロックに入っていなければ、値は0より小さい。「value」と「elementData」の型は何か? –

+2

1が9の前に来ることは分かりませんか? – stark

+0

値と要素データはどちらも比較可能なオブジェクトです。 – igork

答えて

0

それぞれのStringを辞書形式で比較しているようです。 str9の前に置く。 hereのように、Alphanumアルゴリズムを使用するカスタムコンパレータを実装する必要があります。

2

compareTo(String anotherString)を使用した場合の値の比較方法を検討してください。

2つの文字列を辞書的に比較します。比較は、文字列内の各文字のUnicode値の に基づいています。このStringオブジェクトによって表される文字シーケンス は、辞書文字列で引数文字列によって表される文字シーケンス と比較されます。この文字列オブジェクトが語彙的に 引数文字列の前にある場合、結果は 負の整数になります。この文字列 オブジェクトが辞書文字列で引数文字列に続く場合、結果は正の整数です。文字列が等しい場合、結果は であり、 compareToは、 equals(Object)メソッドがtrueを返すときに0を返します。 "str10""str9"と比較されたときに何が起こるかを見ることができるように

"str10"'1'のUnicode値を使用すると、結果"str10"ないされて取得している理由である"str9"'9'のUnicode値より小さいです"str9"より大きい。

代わりにAlphanumアルゴリズムを調べることができます。

+1

なぜdownvote? –

+0

私は考えていない^^。 –

関連する問題