Map (TreeMap in TreeMap)

  • Themenstarter Gelöschtes Mitglied 64159
  • Beginndatum
G

Gelöschtes Mitglied 64159

Gast
Hallo,
also mein Problem ist folgendes: So sieht meine Map aus "TreeMap<Integer, TreeMap<Double, Integer>> map = new TreeMap<>();"
Ich kriege es nicht hin den Wert dieser TreeMap (also die zweite/innere TreeMap) mit einem neuen Wert zu summieren. Ich belege den Schlüssel der äußeren Map mit einem Integer und falls dieser Schlüssel nicht in der Map(Zeile 15-19) vorhanden ist, soll er angelegt werden. Sollte der Schlüssel vorhanden sein, sollen die Werte addiert werden (dieses Addieren krieg ich nicht hin):
TreeMap in TreeMap:
public static void statistik(Scanner console, ArrayList<String> liste) {
        TreeMap<Integer, TreeMap<Double, Integer>> map = new TreeMap<>();
        int auswahl; 
        do {
            auswahl = abfrage(console);      // @auswahl sollen Artikel/Produkte sein
            while (auswahl > 7 || auswahl < 0) {
                System.out.println("Bitte eine Zahl zwischen 0 und 7 eingeben.");
                auswahl = abfrage(console);
            }
            if (auswahl != 0) {
                System.out.print("Zu welchem Preis? ");
                double preis = console.nextDouble(); 
                System.out.print("Wie viele Einheiten? ");
                int einheiten = console.nextInt();
                if (!map.containsKey(auswahl)) {
                    map.put(auswahl, new TreeMap<>());           
                }
                TreeMap<Double, Integer> innereMap = map.get(auswahl);
                innereMap.put(preis, einheiten);
                
            }
        } while (auswahl != 0);
        System.out.println("Statistik (in der obigen Sortierung)" + "\n");
        for (Integer wahl : map.keySet()) {
            System.out.println("Statistik fuer " + liste.get(wahl));
            TreeMap<Double, Integer> innereMap = map.get(wahl);
            double summePreis = 0.0;
            int summeArtikel = 0;
            for (Double preis : innereMap.keySet()) {
                System.out.println("  Einzelverkaeufe (nach Preis aufsteigend sortiert)");
                System.out.println("\t" + innereMap.get(preis) + " Einheiten zu " + round2(preis) + " EUR");
                summePreis += preis;
                summeArtikel += innereMap.get(preis);
                System.out.println("  Akkumulierte Werte:");
                System.out.println("\t" + "Einheiten (gesamt): " + summeArtikel);
                System.out.println("\t" + "Durschnittspreis: " + round2((summePreis * summeArtikel) / summeArtikel) + " EUR" + "\n");
            }
        }
    }

Falls man den Text oben nicht verstehen sollte, versuche ich die Problemstellung etwas vereinfachter darzustellen:
@auswahl(Produkt) Wenn das Produkt nicht vorhanden ist, füge sie in die Map.
@auswahl(Produkt) Wenn das Produkt vorhanden ist, addiere @preis(Preis) und @einheiten(Menge) auf das vorhandene Produkt.


PS: die abfragen() Methode habe ich nicht mit reingenommen, diese gibt nur einen Integer vom Scanner wieder. Solltet ihr dennoch Code benötigen kann ich den Rest auch senden. Ist übrigens mein erster Thread, kann gut möglich sein, dass sehr viel Information fehlt oder der Einstieg generell einfach nur schlecht war.
Vielen Dank im voraus. MfG^^
 
temi

temi

Top Contributor
Ich würde keine zweite Map verwenden, sondern einen expliziten Typen, der Preis und Menge zusammenfasst. Map ist für Schlüssel/Wert-Kombinationen gedacht, nicht für Wert/Wert-Kombinationen.
Java:
// das Beispiel erfüllt kein Kriterium für korrektes Klassendesign, nur damit du weißt, was gemeint ist!
class Artikel {
    public double preis;
    public int menge;
}

// mit

Map<Integer, Artikel> // ich geh davon aus, dass Integer eine Art Artikelnummer ist, sonst wäre es kein sinnvoller Schlüssel
Double als Schlüssel halte ich für fragwürdig, aber der würde dann ja eh entfallen.

Double für genaue Preisberechnung ebenso. Nimm stattdessen lieber int/long und berechne den Preis in Cent, also (anstatt 1.01 € = 101 ct).
 
Zuletzt bearbeitet:
Ähnliche Java Themen
  Titel Forum Antworten Datum
N TreeMap alphabetisch sortieren? Java Basics - Anfänger-Themen 3
O Erste Schritte TreeMap nach Value sortieren Java Basics - Anfänger-Themen 2
H Collections Was ist schneller - HashMap + Sort v TreeMap? Java Basics - Anfänger-Themen 75
D TreeMap: Höheren Key ermitteln und den Value liefern Java Basics - Anfänger-Themen 3
C TreeMap Abfragen Problem Java Basics - Anfänger-Themen 7
F HashMap vs. TreeMap Java Basics - Anfänger-Themen 5
I TreeMap Java Basics - Anfänger-Themen 4
H TreeMap/HashMap synchronisieren Java Basics - Anfänger-Themen 2
M TreeMap Java Basics - Anfänger-Themen 4
H TreeMap<> statt TreeMap<Long, String> Java Basics - Anfänger-Themen 2
algebraiker TreeMap<Date,Object> navigieren? Java Basics - Anfänger-Themen 24
W Treemap remove Java Basics - Anfänger-Themen 5
N Frage zu TreeMap Java Basics - Anfänger-Themen 3
B OOP Jtree aus TreeMap<String, String[]> erstellen? Java Basics - Anfänger-Themen 6
H Datentypen TreeMap<Double, Object> - negative Werte? Java Basics - Anfänger-Themen 4
H TreeMap.remove(value) - und nicht mit key! Geht das? Java Basics - Anfänger-Themen 18
H TreeMap Rückgabe - Compiler-Warnings Java Basics - Anfänger-Themen 9
S Studentenverwaltung mit TreeMap Java Basics - Anfänger-Themen 8
F Treemap und Sortierung? Java Basics - Anfänger-Themen 2
G TreeMap Java Basics - Anfänger-Themen 6
T TreeMap lässt sich nicht sortieren Java Basics - Anfänger-Themen 8
P wie clont sich eine TreeMap? Java Basics - Anfänger-Themen 8
G TreeMap Probleme. Java Basics - Anfänger-Themen 10
G TreeMap vom 1. bis letzte eintrag durchgehen Java Basics - Anfänger-Themen 17
F TreeMap speichern und lesen Java Basics - Anfänger-Themen 3
Q TreeMap immer sortiert halten Java Basics - Anfänger-Themen 9
H Treemap mit zusammengesetzten Key erstellen Java Basics - Anfänger-Themen 13
G TreeMap sortieren über ArrayList als Value Java Basics - Anfänger-Themen 9
O TreeMap nach Object[] casten? Java Basics - Anfänger-Themen 3

Ähnliche Java Themen

Anzeige

Neue Themen


Oben