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):
[CODE lang="java" title="TreeMap in TreeMap" highlight="2, 15-19"]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");
}
}
}[/CODE]
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^^
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):
[CODE lang="java" title="TreeMap in TreeMap" highlight="2, 15-19"]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");
}
}
}[/CODE]
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^^