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

Gast #4923922
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 #4923935
Wie könnte ich ein Array nach der Nachkommastelle sortieren? Also aus 
dem:
[13.11 13.5 14.31 14.43 14.5 14.6]
soll das werden:
[13.5 13.11 14.5 14.6 14.31 14.43]

Irgendeine Idee?
Danke!
Gast #4923973
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
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 #4924248
"ich denke in versen" war also die zu sortierende datensatzbeschreibung… 
da soll mal jemand drauf kommen :)
was für verse? bibel? etwas ausführlicher bitte!
Gast #4924359
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
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

Eine eigene Frage? Dieser Thread ist über 9 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.