mikrocontroller.net

Forum: PC-Programmierung Java Anfänger beste art Obj Array


Autor: Gerd (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo zusammen
Ich bin recht neu in Java habe früher Basic geschrieben und etwas 
"Arduino"
Nun also Java :)
Problem ich möchte massig Zahlen Sortieren und weiß noch nicht genau wie
Also ich habe ein Objekt aus Id und zwei werten welche nachher sortiert 
werden sollen.
Dabei sollen natürlich die Objekte aus den drei zahlen nicht 
durcheinander gebracht werden.
Also zb
Id 1,10,15
ID 2,15,20
ID 4,11,11
die Id dient wirklich nur als identi für mich nicht wirklich relevant 
für die Sortierung und es können id's fehlen...

Also ich würde eine klasse erstellen aus drei int
Dann vermutlich dieses zu einem obj Obj machen.
        Einheit einheit = new Einheit(10,20,30);

Und aus dieses objekten dann ein Array erstellen

Aber das erscheint mir sehr aufwändig?
Gibt es da eine bessere Lösung?

Die Zahlen sind erstmal Statisch die kann ich von Hand eintippen und es 
dürfte sich um gut 300 werte handeln.

Später möchte ich sie eigentlich gerne mit einer festen Nummer 
identifizieren können zb if einheit[1].ID == 5

Autor: Wühlhase (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nach was willst du denn sortieren?

Du könntest, klar, erstmal eine Klasse schreiben um deine Daten zu 
halten.
Es gibt in Java etwas "arrayartiges", das seine gespeicherten Elemente 
selber sortieren kann. Da gibt es LinkedLists, Maps und Collections.

Eines davon kann sich selber sortieren, du mußt lediglich eine Funktion 
implementieren anhand der der Sortieralgorithmus größer als/kleiner 
als/gleich abfragen kann.

Wenn man Objektorientierung noch nicht verstanden hat klingt das nach 
sauviel Arbeit-aber du kannst mir glauben, die einzige Arbeit ist das 
Verstehen von OOP (zugegeben, das dauert auch ein wenig). Aber das lohnt 
sich.

Autor: Wühlhase (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Einen Buchtipp hätte ich noch für dich:

Einmal Java speziell:
Toll zum Verständnis was eine Klasse, ein Interface, usw. ist-und es ist 
sehr gut zu lesen und toll für das Verständnis.
https://www.amazon.de/Java-von-Kopf-bis-Fu%C3%9F/d...

Und hier, was man mit Klassen und Interfaces Schönes machen kann, sollte 
man gleich nach Java von Kopf bis Fuß lesen. Bezieht sich zwar erstmal 
nur auf Java und wird auch nur mit Java erklärt, die meisten Konzepte 
lassen sich aber auch auf andere Programmiersprachen übertragen.
https://www.amazon.de/Entwurfsmuster-von-Kopf-bis-...

Autor: foo (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
public class Deleteme {

    public static void main(String[] args) {
        List<Einheit> werte = Arrays.asList(new Einheit(1, 1, 9),
                new Einheit(2, 2, 8), new Einheit(3, 3, 7),
                new Einheit(4, 4, 6), new Einheit(5, 5, 5), 
                new Einheit(6, 6, 4), new Einheit(7, 7, 3), 
                new Einheit(8, 8, 2), new Einheit(9, 9, 1));
        
        werte.sort(Comparator.comparing(Einheit::getWert2));
        System.out.println("werte = " + werte);
        
        List<Einheit> wert2groesserals4sortiertnachIdAbsteigend = werte.stream()
                .filter(e -> e.getWert2() > 4)
                .sorted((o1, o2) -> o2.getId().compareTo(o1.getId()))
                .collect(Collectors.toList());
        System.out.println("anders sortiert = " + wert2groesserals4sortiertnachIdAbsteigend);
        
        int summeAllerWert1 = werte.stream().mapToInt(Einheit::getWert1).sum();
        System.out.println("summeAllerWert1 = " + summeAllerWert1);
        
        double durchschnittWert2 = werte.stream().mapToInt(Einheit::getWert2).average().orElse(0d);
        System.out.println("durchschnittWert2 = " + durchschnittWert2);
    }

}

class Einheit {

    private final Integer id;
    private final Integer wert1;
    private final Integer wert2;

    public Einheit(Integer id, Integer wert1, Integer wert2) {
        this.id = id;
        this.wert1 = wert1;
        this.wert2 = wert2;
    }

    public Integer getId() {
        return id;
    }

    public Integer getWert1() {
        return wert1;
    }

    public Integer getWert2() {
        return wert2;
    }

    @Override
    public String toString() {
        return "Einheit{" + "id=" + id + ", wert1=" + wert1 + ", wert2=" + wert2 + '}';
    }
    
}

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.