Auf einzelne Werte aus HashSet zugreifen

chupulio

Mitglied
Hallo Javaner,

ich bin Student und habe ein Modul belegt, in dem es auch um Java geht. Im Zuge der Prüfungsvorbereitung versuche ich mich an HashSets und habe mir selbst eine Aufgabe gestellt, die ich wohl überschätzt habe:
Ich habe ein Hashset erstellt, das in meiner main-Methode ein Gebäude mit durch das HashSet erstellten Einheiten ausgibt. Jede Einheit verfügt über vier Werte: String, double, double, boolean. eines der double enthält den Mietpreis der Einheit. Ich hatte mir nun die Aufgabe gestellt, auf irgendeine Art und Weise die gesamten Mieteinnahmen ausgeben zu lassen, verzweifle aber am Zugriff auf das HashSet. In einem Array würde ich es über eine for Schleife (int i=0; i<name.einh.length; i++) wohl hinkriegen, mir fehlt es aber am Know-How, auf einen einzelnen Wert im HashSet zuzugreifen.
bei der bisherigen Recherche habe ich vom Iterator gelesen, ich kann das Prinzip bislang aber noch nicht auf meinen Sachverhalt übertragen und würde mich freuen, wenn mir jemand von euch helfen kann.
Wichtig: Es geht nicht um eine Hausaufgabe oder Übung, die ich bestehen muss und gelöst bekommen möchte, ich habe mir diese Aufgabe im Zuge meiner Lernphase vor der bevorstehenden mündlichen(!) Prüfung selbst ausgedacht.

Vielen Dank fürs bis hierhin Lesen und für jeden Hinweis!
 
die for-Schleife habe ich als das, was ich im ersten Post bzgl des Arrays erwähnt habe kennengelernt, for-each sagt mir nichts, das suche ich mir nun zusammen, danke!
(Das Modul streift Java nur, ich finde es aber so interessant, dass meine aktuellen Bemühungen studienunabhängig, also von Eigeninteresse geprägt sind.)
 
Ich komme nicht weiter, deshalb versuche ich jetzt mal, meinen bisherigen Code zu posten, vielleicht kann mir ja jemand helfen?

Als erstes habe ich eine Klasse für eine allgemeine Wohnheit erstellt:

Java:
public abstract class EH {
        //Einheit
   
        private String bez;
        private double flae;
        private double miete;
       
        public EH(String str0, double f, double m) {
           
        this.bez = str0;
        this.flae = f;
        this.miete = m;
        }
       
        public double getFlae() {
            return this.flae;
        }
        public double getMiete() {
            return this.miete;
        }
        public String toString() {
            return this.bez + " Flaeche: "+this.flae + " Miete : "+this.miete;
        }
}

Dann eine Vererbung an die spezielle Klasse der Gewerbeeinheit:

Java:
public class GE extends EH {
   
    private boolean mwst;
   
    public GE(String str0, double f, double m, boolean mwst) {
            super(str0, f, m);
            this.mwst = mwst;
    }
   
    public boolean getMWST() {
        return this.mwst;
    }
    public String toString() {
        return super.toString() +" MWSt: "+this.mwst;
    }
   

}

Dann eine Gebäudeklasse Bürogebäude (die Mutterklasse lasse ich mal weg), in der per HashSet Gewerbeeinheiten hinzugefügt werden können:

Java:
import java.util.*;
public class BGB extends GB{
   
    private HashSet<GE> ge = new HashSet<GE>();
   
    public BGB(String str0) {
        super(str0);
    }
   
    public void setGE(GE ge) {
        this.ge.add(ge);
    }
   
   
    public String toString() {
        String str = super.toString();
        for(GE akt_ge : this.ge) {
            str = str+ " \n "+akt_ge;
        }
        return str;
    }
   
}

Als Letztes eine Test.java mit einer main Methode, um dort ein solches Bürogebäude mit Gewerbeeinheiten zu erstellen:

Java:
import java.util.*;
public class Test {

    public static void main(String[] args) {
   
    BGB bgb0 = new BGB("Buerogebaeude A");
    bgb0.setGE(new GE("GE 1", 100.00, 500.00, true));
    bgb0.setGE(new GE("GE 2", 100.00, 600.00, true));
    bgb0.setGE(new GE("GE 3", 100.00, 550.00, true));
   
    System.out.println(bgb0);
       

       
    }
}

Eine Einheit hat also als Werte den Namen, die Fläche, die Miete und den boolean für die MwSt. Wie kann ich jetzt nur die Mietsummen zu einer Gesamtsumme addieren (bzw. generell auf einen einzelnen Wert innerhalb meines HashSet zugreifen? Würde mich echt über eine Hilfestellung freuen, bei mir läuft nichts zusammen. Habe versucht, mein getMiete irgendwie an akt_ge : this.ge zu hängen, aber das passt alles nicht 🙁
 
Eine for-each schleife hast du ja. Du fühst ja in die Hashset Objekte von den Gebäuden rein. So wie ich, dass noch in Erinnerung habe, kannst du in der for-each schleife akt_ge.getmiete() aufrufen.

Könntest dies ja mal versuchen. Wenn dies klappt musst du ja dann einfach in der schleife zusammen rechnen.
 
So ich habe mal versucht deinen Code zu auszuführen mit der Gesamt Miete. So wie ich das gesagt habe geht das mit akt_ge.getmiete(). Nur würde ich die for-each schleife nicht in die toString methode machen, sondern mir eine gesamtmiete Methode schreiben wo ich das berechnen lasse und einen double zurück geben lasse.

Und dann einfach diese methode in deiner Main methode aufrufen.
 
Top, danke für die Hilfe, so hab ichs jetzt gemacht:

in BGB.java folgende Methode:

Java:
public double getGesamtmiete() {
        double gesamtm = 0.0;
        for(GE akt_ge : this.ge){
                gesamtm = gesamtm + akt_ge.getMiete();
    }
        return gesamtm;

und in der main dann nur noch die Zeile

Java:
System.out.println("Gesamtmiete ist :"+bgb0.getGesamtmiete()+",-");

hat sofort geklappt. Ein geniales Forum, tausend Dank! So macht Lernen Spaß.
 
Noch ein Tipp: Verwende klare Variablennamen (mit ge oder akt_ge kann sonst keiner was anfangen und du musst im Zweifelsfall nach ein paar Wochen selber erstmal drüber nachdenken was es bedeutet hat). Und am besten gleich angewöhnen alles auf englisch zu machen (dann gibts auch keine Probleme mit den Umlauten 😉)
 

Neue Themen


Zurück
Oben