HashMap+Vererbung

El Hadji

Bekanntes Mitglied
Servus Community,
Ich habe eine Frage. Ich habe 2 Klassen, Kino und eine Unterklasse KinoMitErmaessigung. Die Kino Klasse hat eine Methode die den Preis für alle Reihen in einer Map zurück gibt, Reihen = Key, Preise = value. Kino MitErmaessigung soll natürlich nur die Preise der Map verändern und zurück geben.

Hier mal die Oberklasse Kino:
Code:
import java.util.*;

public class Kino
{
    // instance variables - replace the example below with your own
    private int n;
    private int m;
    private Map<Integer, Double> diePreise;

  
    public Kino(int n, int m, Map<Integer, Double> diePreise)
    {
        this.n = n;
        this.m = m;
        this.diePreise = diePreise;
    }

  
    public Map<Integer, Double> getDiePreise()
    {
        return diePreise;
    }
   
   
}

Und meine Unterklasse:
Code:
import java.util.*;

public class KinoMitErmaessigung extends Kino
{
    // instance variables - replace the example below with your own
  
    public KinoMitErmaessigung(int n, int m, Map<Integer, Double> diePreise)
    {
       super(n,m,diePreise);
    }

   
    public Map<Integer, Double> getErmaessigtePreise(double ermaessigung)
    {
       Map <Integer, Double> neu = super.getDiePreise();
       Set<Integer> liste = super.getDiePreise().keySet();
      
       liste.toArray();
      
       
        for(int i = 0; i < liste.length; i++)
        {
            neu.replace(liste[i], neu.get(liste[i]), neu.get(liste[i]*((100-ermaessigung)/100)));
        }
       
        return neu;
      
    }
}

Natürlich funktioniert das umschreiben des Sets in eine Array nicht. Aber ansonsten müsste der Ansatz richtig sein oder?
mfg El Hadji
 

El Hadji

Bekanntes Mitglied
Ok das mit dem umschreiben zum Array bin ich umgangen aber wieso funktioniert das replacen meiner Mappe nicht?
Code:
import java.util.*;

public class KinoMitErmaessigung extends Kino
{
    // instance variables - replace the example below with your own
  
    public KinoMitErmaessigung(int n, int m, Map<Integer, Double> diePreise)
    {
       super(n,m,diePreise);
    }

   
    public Map<Integer, Double> getErmaessigtePreise(double ermaessigung)
    {
       Map <Integer, Double> neu = super.getDiePreise();
      
      
      
       
        for(Integer t : super.getDiePreise().keySet())
        {
            neu.replace(t, neu.get(t), neu.get(t*((100-ermaessigung)/100)));
        }
       
        return neu;
      
    }
}
 

El Hadji

Bekanntes Mitglied
Sorry die Preußen schießen zu schnell. Bin selbst auf den dummen Fehler gestoßen!

So müsste es natürlich stimmen!
Was meint ihr?
Code:
import java.util.*;

public class KinoMitErmaessigung extends Kino
{
    // instance variables - replace the example below with your own
  
    public KinoMitErmaessigung(int n, int m, Map<Integer, Double> diePreise)
    {
       super(n,m,diePreise);
    }

   
    public Map<Integer, Double> getErmaessigtePreise(double ermaessigung)
    {
       Map <Integer, Double> neu = super.getDiePreise();
      
      
      
       
        for(Integer t : super.getDiePreise().keySet())
        {
            neu.replace(t, neu.get(t), neu.get(t)*(100-ermaessigung)/100);
        }
       
        return neu;
      
    }
}
 

mihe7

Top Contributor
Replace funktioniert, wenn - wie in Deinem Fall - bereits ein Eintrag für den Schlüssel existiert. Und put funktioniert genau aus dem Grund, den Du geschrieben hast :)
 

Robat

Top Contributor
Weil ja eine Java-8 Lösung heute nicht mehr fehlen darf :p
Java:
int x = 45;
final BiFunction<Double, Double, Double> mapFunction = ( a, b ) -> a * ( ( 100 - x ) / 100d );
map.forEach(( key, value ) -> map.merge(key, value, mapFunction));
 

mrBrown

Super-Moderator
Mitarbeiter
Weil ja eine Java-8 Lösung heute nicht mehr fehlen darf :p
Java:
int x = 45;
final BiFunction<Double, Double, Double> mapFunction = ( a, b ) -> a * ( ( 100 - x ) / 100d );
map.forEach(( key, value ) -> map.merge(key, value, mapFunction));
Java:
map.replaceAll((reihe, preis) -> preis * (100 - ermaessigung) / 100);
;)
 

Neue Themen


Oben