2017-04-19 2 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++; 
} 

Die allererste if-Anweisung sollte eine positive Zahl aus compareTo zurückgeben. Ich habe überprüft und bestätigt, dass es eine positive Zahl zurückgibt, jedoch nicht in den Block gelangt.Wenn Statement-Bedingung nicht übergeben wird aber sollte !? (java)

Ich vergleiche Strings, die diese "str1" "str2" ... usw. Es funktioniert gut, bis ich zu "str10" komme und es mit "str9" vergleichen muss. Es sagt, dass "str10" ist weniger als "str9" macht das Sinn?

Es passiert alle 10 Iterationen. Also sieht mein Array wie folgt aus: [str0, str1, str10 ... str19, str2, str20, str21, ... str29..etc]

+1

Wenn 'value.compareTo (elementData [size])' einen Wert größer als 0 zurückgibt, ** ** wird ** in den Block eingetragen. Wenn es den Block nicht eingibt, ist der Wert kleiner als 0. Welche Arten von "value" und "elementData" gibt es? –

+2

Weißt du nicht, dass 1 vor 9 kommt? – stark

+0

Wert- und Elementdaten sind beide vergleichbare Objekte. – igork

Antwort

0

Sie scheinen jedes String in ihrer lexikografischen Form zu vergleichen, was bedeutet, dass str10 es wird vor str9 platziert werden. Sie müssen einen benutzerdefinierten Vergleicher implementieren, der den Alphanum-Algorithmus verwendet (siehe here).

2

überlegen, wie die string Werte bei der Verwendung compareTo(String anotherString) verglichen werden.

Vergleicht zwei Strings lexikographisch. Der Vergleich basiert auf dem Unicode-Wert jedes Zeichens in den Zeichenfolgen. Die von diesem String-Objekt dargestellte Zeichenfolge wird lexikografisch mit der Zeichenfolge verglichen, die durch die Argumentzeichenfolge dargestellt wird. Das Ergebnis ist eine negative ganze Zahl, wenn dieses String-Objekt lexikographisch vor der Argument-Zeichenfolge steht. Das Ergebnis ist eine positive Ganzzahl, wenn das Objekt String lexikographisch dem Argument string folgt. Das Ergebnis ist Null, wenn die Strings gleich sind; compareTo gibt genau 0 zurück, wenn die Methode equals (Object) den Wert true zurückgibt.

wie Sie sehen können, was passiert ist, wenn "str10"-"str9" der Unicode-Wert von '1' in "str10" verglichen wird, ist kleiner als der Unicode-Wert von '9' in "str9", weshalb Sie das Ergebnis, wenn es darum "str10" sind nicht größer als "str9".

können Sie den Alphanum-Algorithmus als Alternative betrachten.

+1

Warum der Downvote? –

+0

Ich habe keine Ahnung ^^. –

Verwandte Themen