Arrays.sort(Arr) float Array funktioniert nicht. Wieso?

Gast #4923922
Lesenswert?

Das Ziel ist es eine ArrayList nach ihrem Float value zu sortieren. 
Dafür kopiere ich den Inhalt der ArrayList in ein float Array und 
sortiere dieses. Doch beim Sortieren wird es falsch sortiert. Seht euch 
das Ergebnis selbst an im Bild. Hier ist der Code:
1
                 
2
            Float fArr[] = new Float[versList.size()];
3
            for(int j = 0; j < versList.size(); j++){
4
                fArr[j] = Float.parseFloat(versList.get(j).replaceAll(",", ".").replaceAll("[^0-9.]", ""));
5
            }
6
            System.out.println(Arrays.toString(fArr));
7
            Arrays.sort(fArr);
8
            System.out.println(Arrays.toString(fArr));
9
            for(int i = 0; i < fArr.length; i++){
10
                versList.set(i, fArr[i].toString());
11
            }
12
            for(int i = 0; i < fArr.length; i++){
13
                versList.set(i, versList.get(i).replace(".", ","));
14
            }

was mache ich denn hier falsch? Ich wäre dankbar für jede Hilfe!
Angehängte Dateien:
Gast #4923973
Lesenswert?

idee: arraylist benutzen, comparator nach belieben durch @override von 
compare(a,b) definieren.
1
import java.util.ArrayList;
2
import java.util.Collections;
3
import java.util.Comparator;
4

5
public class SortArray {
6

7
    private ArrayList<Float> gFloatArray;
8

9
    public SortArray() {
10
        gFloatArray = new ArrayList<>();
11
        gFloatArray.add(14.43f);
12
        gFloatArray.add(14.5f);
13
        gFloatArray.add(14.6f);
14
        gFloatArray.add(13.11f);
15
        gFloatArray.add(13.5f);
16
        gFloatArray.add(14.31f);
17
    }
18

19
    public void sort() {
20
        if (null == gFloatArray) {
21
            return;
22
        }
23

24
        for (Float float1 : gFloatArray) {
25
            System.out.println("unsorted: " + float1);
26
        }
27

28
        Collections.sort(gFloatArray, new Comparator<Float>() {
29
            @Override
30
            public int compare(Float f1, Float f2) {
31
                return f1.compareTo(f2);
32
            }
33
        });
34

35
        for (Float float1 : gFloatArray) {
36
            System.out.println("sorted: " + float1);
37
        }
38
    }
39

40
    public static void main(String[] args) {
41
        SortArray sortArray = new SortArray();
42
        sortArray.sort();
43
    }
44
}

ausgabe:
1
run:
2
unsorted: 14.43
3
unsorted: 14.5
4
unsorted: 14.6
5
unsorted: 13.11
6
unsorted: 13.5
7
unsorted: 14.31
8
sorted: 13.11
9
sorted: 13.5
10
sorted: 14.31
11
sorted: 14.43
12
sorted: 14.5
13
sorted: 14.6
14
BUILD SUCCESSFUL (total time: 0 seconds)
Persönliche Seite #4924231
Lesenswert?

Edii schrieb:
> soll das werden:
> [13.5 13.11 14.5 14.6 14.31 14.43]

Das ist kaputt. Du solltest hier nicht von Nachkommastellen sprechen 
oder die fehlenden führenden Nullen einfügen.

Also nicht 13.5 sondern 13.05. Nur dann kannst Du mit float und 
ensprechenden "natürlichen" Sortierfunktionen arbeiten.


Besser wäre es, wenn Du komplett auf eine Floatdarstellung verzichten 
würdest, und eine Struktur mit zwei int-Elementen verwenden würdest, die 
Kapitel- und Versnummer heißen, und aus obigem Beispiel mit 13 und 5 
besetzt werden.

Dann ist ein Vergleich mit Kapitel 13, Vers 11 einfacher und 
geradliniger.
Gast #4924359
Lesenswert?

c-hater schrieb im Beitrag #4924348:
> Da stellt sich nämlich für jeden nicht völlig Verblödeten als erstes die
> Frage, nach welcher Nachommastelle sortiert werden soll...

Naja, falls es sich wirklich um Bibelverse handelt, erklaert das doch 
alles ;)

Ansonsten:
String zu Float und diesen dann in ein Array packen?
In Java sollte man Arrays fuer primitive nutzen, also float anstatt 
Float.
Persönliche Seite #4924383
Lesenswert?

c-hater schrieb im Beitrag #4924348:
> Nein. Ich kann in dem gezeigten Beispiel einfach kein plausibles System
> zur Sortierung erkennen. Inbesondere nicht unter dem Aspekt, dass nach
> "der" Nachkommastelle sortiert werden soll.

Gib Dir mal ein kleines bisschen Mühe, und lies einfach mal, was ich ein 
paar Beiträge vor Deinem geschrieben habe.

So blöd, das System nicht erkennen zu können, bist Du nämlich eigentlich 
nicht.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren