Forum: PC-Programmierung Arrays.sort(Arr) float Array funktioniert nicht. Wieso?


von Edii (Gast)


Angehängte Dateien:

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!

von Edii (Gast)


Lesenswert?

Ach ja ganz vergessen: Java ist die Sprache.
Danke nochmal!

von Mark B. (markbrandis)


Lesenswert?

Was genau soll da jetzt falsch sein? Das untere Array in Deinem Bild ist 
in aufsteigender Reihenfolge sortiert. Ist das nicht das, was Du haben 
wolltest?

: Bearbeitet durch User
von Edii (Gast)


Lesenswert?

UUUUpps. Ich habe ganz falsch mitgedacht :((( Stimmt! Ich denke nämlich 
in Versen und nicht in normaler reihenfolge

von Edii (Gast)


Lesenswert?

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!

von c.m. (Gast)


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)

von Rufus Τ. F. (rufus) Benutzerseite


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.

von c.m. (Gast)


Lesenswert?

"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!

von Mark B. (markbrandis)


Lesenswert?

Edii schrieb:
> UUUUpps. Ich habe ganz falsch mitgedacht :((( Stimmt! Ich denke nämlich
> in Versen und nicht in normaler reihenfolge

Ich nehme mal an Du meinst Bibelverse? Dann ist float nicht der richtige 
Datentyp für die Aufgabe.

von Skippy (Gast)


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.

von Rufus Τ. F. (rufus) Benutzerseite


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.

von c.m. (Gast)


Lesenswert?

da kommt jetzt nichts mehr vom TO, oder? ziemlich unfreundlich.

von Mark B. (markbrandis)


Lesenswert?

c.m. schrieb:
> da kommt jetzt nichts mehr vom TO, oder? ziemlich unfreundlich.

Nachdem c-hater ihn erstmal kräftig beschimpft hat, wundert es mich 
freilich auch nicht wenn der TO wegbleibt.

: Bearbeitet durch User
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.