Programm zum verwalten von Objekten

Status
Nicht offen für weitere Antworten.

Unkownsyntax

Bekanntes Mitglied
Bin gerade am Programmieren eines Verwaltungsprogs.... soll das können:

Es sollen beliebig viele Häuser verwaltet werden können. Zur Laufzeit sollen Häuser
dazugenommen oder wieder abgegeben werden können. Es soll auch die Moeglichkeit
bestehen, dass nach Häusern anhand der Adresse gesucht werden kann. Das heißt man braucht
Methoden zum Hinzufügen, Entfernen und Suchen von Häusern.

Von jedem Haus möchten Sie wissen, wo es sich befindet (eindeutige Adresse). Jedes Haus hat
eine fixe Anzahl von Stockwerken und in jedem Stockwerk eine fixe Anzahl von Wohnungen.

Man soll die Bewohner (Personen) jeder Wohnung verwalten können damit jederzeit Personen
in eine Wohnung ein- oder aus einer Wohnung ausziehen können. Daher braucht man auch hier
Methoden zum Hinzufügen und Entfernen von Personen.

Von den Personen will man den Namen und das Alter wissen. Diese beiden Angaben sollen
eine Person innerhalb einer Wohnung eindeutig identifizieren.

Schreiben Sie ein Testprogramm, das mindestens 2 Häuser, die Sie verwalten, erzeugt. Diese
sollen unterschiedlich viele (mindestens 2) Stockwerke besitzen. Bevölkern Sie die erzeugten
Wohnungen mit unterschiedlich vielen Personen (es dürfen auch manche, max. die Hälfte der
Wohnungen leer bleiben).

Sehen Sie Methoden vor, die es Ihnen erlauben, die Personendaten der Bewohner auf dem
Bildschirm auszugeben. Im Testprogramm soll ein Aufruf der Form
myHouseAdmin.writeResidents(); genügen. Dadurch soll das Hausverwaltungs-Objekt alle
seine Haus-Objekte anweisen, ihre Bewohner auszugeben. Die einzelnen Haus-Objekte leiten
das ihrerseits an ihre Wohnungs-Objekte weiter. Diese können dann endlich wirklich auf die
Personen zugreifen.

Als Klassen bieten sich Hausverwaltung, Haus, Wohnung und Person an. Um untergeordnete
Objekte zu verwalten, sollen Sie lineare Listen verwenden. Beachten Sie auch die Datenkapselung
(„set“ und „get“ -Methoden)!
Gestalten Sie die Ausgabe des Hausverwaltungprogrammes so, dass diese nach Häusern,
Stockwerken, Wohnungen gegliedert ist und für jede Wohnung die Bewohner dazu ausgibt.

Hab jetzt mal den code für die ganzen classen geschrieben und so ca:



Code:
public class Hausverwaltung {

    public void run() {
        int a = 0;
        do {
            IO.writeLn("0 Für Ende!");
            IO.writeLn("1 Ein Haus hinzufügen!");
            IO.writeLn("2 Ein Haus entfernen! ");
            IO.writeLn("3 Ein Haus suchen!");

            a = IO.readInt();

            switch (a) {
                case 1:
                    IO.write("Name des Hauses:  ");
                    String addHouse = IO.readWord();
                    this.addhouse(addHouse);
                    break;
                case 2:
                    IO.write("Name des Hauses:  ");
                    String delHouse = IO.readWord();
                    this.delHouse(delHouse);
                    break;
                case 3:
                    IO.writeLn("Straße des suchenden Hauses: ");
                    String suchen = IO.readWord();
                    searchHouse(suchen);
                    break;
            }
        } while (a != 0);
    }

    public void searchHouse(String search) {
        
        
    }

    public void addhouse(String House) {
      Haus myhouse = new Haus();  
      IO.writeLn("Adresse: ");
      String a = IO.readWord();
      Haus.setAdresse(a);  // gibt mir hier nen fehler aus das er die methode nicht kennt!
     
    }

    public void delHouse(String House) {
        
        
    }
}

public class Haus {

    int AnzahlWohnungen;
    int Stockwerke;
    String Adresse = "";

   void setAdresse(String Adresse) {

        this.Adresse = Adresse;
    }

    String getAdresse() {
        return Adresse;
    }

    void setAnzahlWohnungen(int Anzahl) {
        if (Anzahl < 0) {
            Anzahl = 0;
        }
        this.AnzahlWohnungen = Anzahl;
    }

    int getAnzahlWohnungen() {
        return AnzahlWohnungen;
    }

    void setStockwerke(int Anzahl) {
        if (Anzahl < 0) {
            Anzahl = 0;
        }
        this.Stockwerke = Anzahl;
    }

    int getStockwerke() {
        return Stockwerke;
    }
}


public class Wohnung {

    int Person;

    int getPerson() {
        return Person;
    }

    void setPerson(int Anzahl) {
        if (Anzahl < 0) {
            Anzahl = 0;
        }
        this.Person = Anzahl;

    }
}


public class Person {

    String Name = "";
    int age;

    String getName() {
        return Name;
    }

    void setName(String name) {

        this.Name = name;
    }

    void setAlter(int Anzahl) {
        if (Anzahl < 0) {
            Anzahl = 0;
        }
        this.age = Anzahl;
    }

    int getAlter() {
        return age;
    }
}

public class Main {

    public static void main(String[] args) {
     Hausverwaltung hausverwaltung = new Hausverwaltung();
     hausverwaltung.run();
     
    }

}

Hab irgendwie das problem dass ich in der klasse hausverwaltung keine set und get funktionen von anderen klassen aufrufen kann ... wieso ist das so?

Was haltet ihr bis jetzt von dem programm von den klassen so ok? hat wer verbesserungsvorschläge?

Bei den add search und del house bin ich mir nicht ganz sicher wie ich das am besten mache..
 

0x7F800000

Top Contributor
Hab irgendwie das problem dass ich in der klasse hausverwaltung keine set und get funktionen von anderen klassen aufrufen kann ... wieso ist das so?
weil deine getter und setter nicht statisch sind (was auch richtig so ist). Du kannst die nicht an der Klasse, sondern nur an den Instanzen der Klasse aufrufen, also nicht
Code:
 Haus.method()
sondern
Code:
 Haus h=new Haus(...); h.method()
.
[edit] korrigiert, besten Dank an mogel[/edit]
Was haltet ihr bis jetzt von dem programm von den klassen so ok? hat wer verbesserungsvorschläge?
Nunja, bisher ist da ja nicht viel drin.
Vor allem, was nicht drin ist, sind die ganzen sichtbarkeits-schlüsselwörter public private protected, eigentlich schade, dass der compiler deswegen nicht meckert, die sollte man eigentlich nie einfach so weglassen. mach alles private was nur irgendwie möglich ist.
 

Unkownsyntax

Bekanntes Mitglied
noch ne frage wenn ich jetzt bei der methode addhouse haus h = new haus (); schreib wird dann nicht jedes mal wenn ich ein haus anlege das andere überschrieben ?
 

0x7F800000

Top Contributor
ne, es gibt da nichts zu überschreiben: wenn du die methode verlässt, wird die lokale, nirgends sonst referenzierte variable h sowieso vom garbage-collector eingesammelt.
 

Unkownsyntax

Bekanntes Mitglied
heißt dass das haus was ich erstelle mit der methode wird nach dem verlassen des programmes glöscht? sollte ja nicht sein .... oder täusch ich mich da jetzt. soll ich nur in der main zwei häuser erstellen und dann einfach eins hinzufügen können?
 

0x7F800000

Top Contributor
Nach dem beenden des Programms wird sowieso der komplette RAM freigegeben (du musst deinen Rechner ja auch nicht nach einmaliger benutzung wegwerfen, und mit frischen RAM-Plättchen muss man den PC vor dem Start auch nicht füttern, diese angenehme Tatsache ist dir womöglich auch schon aufgefallen ;) )
Dieses objekt "myhouse" aus deiner "korrigierten" methode:
Code:
public void addhouse(String House) {
      Haus myhouse = new Haus(); 
      IO.writeLn("Adresse: ");
      String a = IO.readWord();
      myhouse.setAdresse(a);
}
wird aber sofort nach dem verlassen der methode wieder eingesammelt und gelöscht, weil es ja nirgendwo mehr referenziert wird. Was nicht mehr referenziert wird, und nur als unerreichbares unauslesbares unbeschreibbares schwarzes Loch im Speicher rumliegt, wird in JVM vom Garbage Collector eingesammelt. Ist auch gut so, sonst würde ja ein memory-leak entstehen, und das programm nach einiger zeit abstürzen (ein ziemliches Problem, wenn man zB mit C++ proggt, da muss man immer aufpassen, dass man selbst alles sauber aufräumt).

Wenn du das Objekt "myhouse" nicht verlieren willst, muss du das ja irgendwo referenzierbar abspeichern, etwa in irgendeiner collection, die member-variable in deiner Häuserverwaltungsklasse ist:
Code:
public class HaeuserVerwaltung{
   private Collection<Haus> haeuser;
   public HaeuserVerwaltung(){
       haeuser=new WasAuchImmerFüeEineCollection<Haus>();
   }

   public void hausEinlesen(){
      Haus x=new Haus();
      ....
      x.setzeName("shicebude");
      haeuser.add(x); // jetzt ist es in der collection drin, und wird erstmal nicht vom GC verschrottet
   }
}

und überhaupt... einige dich mit deinem alter ego auf irgendEINE sprache, dieser ganzer "haus-house" salat ist doch unerträglich :bloed:
 

Unkownsyntax

Bekanntes Mitglied
hab jetzt gerade herumgesurft und da ich es sowieso mit linearen listen machen muss wärs doch am besten wenn ich es in der methode addhouse mit ner array liste mache oder? weil da bleibt ja dann das objekt vorhanden oder?

also ArrayList h = new ArrayList(); oder?
 

Landei

Top Contributor
So kann man es machen, aber das ist nicht gut. Üblicherweise schreibt man
Code:
List<Haus> hausListe = new ArrayList<Haus>();
-> bei Collections immer den Typ (hier: Haus) mit angeben
-> Immer das allgemeine Interface (hier: List) als Typ der Variablen angeben, und dann mit der konkreten Klasse (hier: ArrayList) inititalisieren
 

Unkownsyntax

Bekanntes Mitglied
Ok da ich ja aber listen für die häuser und dann untergeordnete listen für personen wohnungen usw brauche wie wär es am besten zu machen? mit linearen listen eine liste immer für ein haus mit den wohnungen usw. oder eher eine liste wo die häuser drinnen sind dann ein für wohnungen usw. oder wer ne andere idee?
 

Unkownsyntax

Bekanntes Mitglied
Landei hat gesagt.:
So kann man es machen, aber das ist nicht gut. Üblicherweise schreibt man
Code:
List<Haus> hausListe = new ArrayList<Haus>();
-> bei Collections immer den Typ (hier: Haus) mit angeben
-> Immer das allgemeine Interface (hier: List) als Typ der Variablen angeben, und dann mit der konkreten Klasse (hier: ArrayList) inititalisieren

wenn ich es so schreibe kann ich mit hausliste.add(string); nicht hinzfügen da gibt er mir einen fehler aus....

was mich noch beschäftigt ist das problem und zwar wenn ich jetzt bei addhaus hausliste = new hausliste schreib und zweimal ein haus mit einen anderen string hinzufüge dann gibt es doch zwei listen mit den gleichen namen aber halt einen anderen string im ersten array oder? und wie könnte ich das am besten machen mit den personen wohnungen usw ... gehört ja immer zu einen haus wie verknüpfe ich das ?
 

Leroy42

Top Contributor
Andrey hat gesagt.:
...du musst deinen Rechner ja auch nicht nach einmaliger benutzung wegwerfen, und mit frischen RAM-Plättchen muss man den PC vor dem Start auch nicht füttern...

:shock:

Achso! Gut das du das sagst... ( :cool: )
 

0x7F800000

Top Contributor
@Unknownsyntax
Unkownsyntax hat gesagt.:
wenn ich es so schreibe kann ich mit hausliste.add(string); nicht hinzfügen da gibt er mir einen fehler aus....
natürlich, weil Strings eben keine Häuser sind. Schreibe in der haus-Klasse irgendeinen Konstruktor, der Strings akzeptiert, und füge die dann mit
Code:
hausverwaltung.add(new Haus("name des hauses, was auch immer das sein soll"));
ein.
Übrigens, sowas wie "new Hausverwaltung<Haus>" mag zwar semantisch korrekt sein, ergibt rein logisch jedoch äußerst wenig sinn, was soll denn eine "Hausverwaltung" noch außer Häusern verwalten dürfen? Entscheid dich mal was du machen möchtest, Generics als Option wurden hier jetzt erwähnt, jetzt bist du wieder an der reihe.

zwei listen mit den gleichen namen
Was soll der name einer Liste sein? Wenn du den bezeichner der Variable meinst, dann ist die Aussage völlig falsch, bezeichner ist keine eigenschaft des Objektes, sondern eben eine referenz darauf. Das Objekt selbst kann und muss nichts davon wissen (es sein denn, du schreibst hier irgendeine abgefahrene Künstliche Intelligenz, die mit Reflection ihren eigenen Aufbau erforschen soll^^)
und wie könnte ich das am besten machen mit den personen wohnungen usw ... gehört ja immer zu einen haus wie verknüpfe ich das ?
"gehört dazu" klingt schwer nach einer einfachen member-variable in der Haus-Klasse:
Code:
class Haus{
   private Collection<Bewohner> bewohner;
   private Collection<Möbel> möbel;
   ...
}

@Leroy42
ja, bitte sehr^^ ;)
 

Unkownsyntax

Bekanntes Mitglied
ich mein wegen dem zwei listen mit den gleichen namen : wenn ich jetzt eine methode schreib wie im programm mit List h = new List also so ein neues haus erstelle und dann wieder die add house methode aufrufe dass es ja zwei listen mit den gleichen namen gibt oder?

Oder sollte ich es lieber so machen dass ich nur eine Liste erstelle mit house z.b. und dann in der liste halt die namen der häuser einfüge und von der liste irgendwie mit zeiger oder so wieder von den namen des hauses weiter zu einer neuen liste mit den wohnungen personen gehe?

Hab da jetzt mal den konstruktor hoffe du hast es so gemeint oder?

Code:
 public Haus(String Adresse){
    
  this.Adresse = Adresse;
  }

aber was ich nicht verstehe wie du das mit dem code meinst und wo hinzufügen?
Code:
hausverwaltung.add(new Haus("name des hauses, was auch immer das sein soll"));
[/code]


sry für die blöden fargen aber bin halt ziemlich anfänger noch und dass mit den listen will einfach nicht in meinen blöden schädel gehn^^
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
A "Hello World"-Programm läuft nicht Java Basics - Anfänger-Themen 16
J Delay erzeugen, ohne Programm zu blockieren Java Basics - Anfänger-Themen 7
Ü Dead Code im Programm? Java Basics - Anfänger-Themen 13
M Java Mail Programm Java Basics - Anfänger-Themen 4
E Java Programm zur anzeige, ob Winter- oder Sommerzeit herrscht Java Basics - Anfänger-Themen 62
M Mini Jar-Programm Java Basics - Anfänger-Themen 51
G JTable Listselectionlistener friert das Programm ein Java Basics - Anfänger-Themen 8
M Das Programm stellt nichts dar Java Basics - Anfänger-Themen 2
K Programm compilierbar aber nicht ausführbar... Java Basics - Anfänger-Themen 21
Z Programm Ideen Java Basics - Anfänger-Themen 8
P Wie kann ich in meinem Java Programm etwas dauerhaft speichern? Java Basics - Anfänger-Themen 5
P Wie kann ich beispielsweise Speicherstände eines Spiels DAUERHAFT in meinem Programm speichern? Java Basics - Anfänger-Themen 3
H Java-Programm zur Ausgabe von Zuständen Java Basics - Anfänger-Themen 80
G Kann Java-Programm nicht als jar aufrufen, auch als EXE nicht Java Basics - Anfänger-Themen 19
benny1993 Java Programm erstellen für ein Fußball-Turnier Java Basics - Anfänger-Themen 3
T Programm stürzt ab Java Basics - Anfänger-Themen 40
KeinJavaFreak Erste Schritte Programm "Java(TM) Platform SE binary " nicht vorhanden Java Basics - Anfänger-Themen 1
G Programm läuft durch, ohne Eingabe aus dem Chat abzuwarten Java Basics - Anfänger-Themen 4
N Programm Funktioniert mit .txt Datei aber nicht mit .rtf Datei Java Basics - Anfänger-Themen 2
N Interpreter-Fehler Compiler zeigt keine Fehler an, aber das Programm läuft nicht (BlueJ) Java Basics - Anfänger-Themen 2
D Java Programm mit Batch-Datei starten Java Basics - Anfänger-Themen 32
Jul1n4tor Programm mit Scanner und If-Statements Java Basics - Anfänger-Themen 2
D Wie sehe ich ein Java-Programm? Java Basics - Anfänger-Themen 27
K Ist das Programm schlecht bzw. schlampig programmiert ? Java Basics - Anfänger-Themen 9
Zrebna Kann Java Programm nicht in Konsole ausführen Java Basics - Anfänger-Themen 1
K Warum läuft das Programm nicht(bzw. nicht richtig) Java Basics - Anfänger-Themen 4
M Von Eclipse zum richtigen Programm Java Basics - Anfänger-Themen 1
nbergmann IntelliJ: Wie lade ich ein fertiges Programm aus dem Lehrbuch? Java Basics - Anfänger-Themen 26
D Anfängerfrage zu meinem Programm. Java Basics - Anfänger-Themen 15
nbergmann Eclipse: Lehrbuch-Programm startet nicht Java Basics - Anfänger-Themen 22
I Jetty starten von Programm (Main) Java Basics - Anfänger-Themen 27
Kydo Programm Beschreibung Java Basics - Anfänger-Themen 3
nbergmann Eclipse: Lehrbuch-Programm startet nicht Java Basics - Anfänger-Themen 7
T Java FXML selbes Fenster verschiedene Stellen im Programm Java Basics - Anfänger-Themen 5
frager2345 Programm erstellen ohne Autoboxing und Unboxing Java Basics - Anfänger-Themen 13
D JAVA Programm schreiben Java Basics - Anfänger-Themen 46
P exportiertes Programm funktioniert nur teilweise Java Basics - Anfänger-Themen 7
J Mein Programm läuft bei der ersten Eingabe nicht mehr weiter, woran liegt das? Java Basics - Anfänger-Themen 6
M Wo hält das Programm an? Java Basics - Anfänger-Themen 11
J Mein Java Programm lässt sich nicht mehr bearbeiten Java Basics - Anfänger-Themen 2
Fugover Programm funktioniert nicht Java Basics - Anfänger-Themen 11
Fugover Kopfrechnen-Programm Java Basics - Anfänger-Themen 6
NadimArazi Wie kann ich eine collision detection für die Paddles in meinem Pong Programm hinzufügen? Java Basics - Anfänger-Themen 4
sserio Wieso funktioniert mein Programm nicht Java Basics - Anfänger-Themen 2
sserio Größtes Palindrom-Produkt Programm funktioniert nur halb Java Basics - Anfänger-Themen 23
J selbst erstellte Datei mit Programm öffnen Java Basics - Anfänger-Themen 10
F nach Methode Programm nicht beenden Java Basics - Anfänger-Themen 9
A wie kann ich es in meinem Programm rein tun Java Basics - Anfänger-Themen 8
S Fehler beim Programm Java Basics - Anfänger-Themen 2
Jose05 Fehler im Programm feststellen Java Basics - Anfänger-Themen 2
F Kann mir jemand kurz dieses Programm erklären? Java Basics - Anfänger-Themen 22
I Programm erkennt nicht an das Array zurückgegeben wird trotz Initialisierung *einfach* Java Basics - Anfänger-Themen 9
J Nach dem Exportieren funktioniert mein Programm nicht mehr Java Basics - Anfänger-Themen 8
P Mein Programm wird zwar erfolgreich Compiliert, öffnet sich aber nicht Java Basics - Anfänger-Themen 6
J Kann ich mein Programm so schreiben? Java Basics - Anfänger-Themen 4
A Lotto Programm Java Basics - Anfänger-Themen 3
S Programm erstellen Java Basics - Anfänger-Themen 3
A Verarbeiten einer Excel Datei durch das java-Programm Java Basics - Anfänger-Themen 3
S MinMax Programm erstellen Java Basics - Anfänger-Themen 4
J Interpreter-Fehler Programm gibt nicht gewünschtes Ergebnis aus Java Basics - Anfänger-Themen 11
brypa Programm mit Eingabe Java Basics - Anfänger-Themen 129
B Java Programm soll mit Python kommunizeren Java Basics - Anfänger-Themen 1
SpigBin Programm läuft nicht weiter... Java Basics - Anfänger-Themen 10
M JAVA Programm in Website einbinden Java Basics - Anfänger-Themen 19
B Programm, dass alle 3 Tage eine Webseite öffnet? Java Basics - Anfänger-Themen 20
B Programm beendet sich nicht und weiteres seltsames Verhalten Java Basics - Anfänger-Themen 9
N Eclipse Programm normal ausführen Java Basics - Anfänger-Themen 1
D Programm auf Enter warten lassen Java Basics - Anfänger-Themen 2
C Programm das feststellen kann, ob eine eingegebene Zahl einem Schaltjahr entspricht, richtig geschrieben? Java Basics - Anfänger-Themen 11
C Brauche Hilfe um ein Programm zu schreiben Java Basics - Anfänger-Themen 8
F Frage betreff Programm mit dem man C++-Code in JAVA-Code übersetzen lassen kann Java Basics - Anfänger-Themen 2
nevel Programm für die Summer der Zahlen 1- 1ß Java Basics - Anfänger-Themen 12
WAB9703-04 Programm zum automatischen Ausfüllen von Formularen programmieren Java Basics - Anfänger-Themen 3
OSchriever Jar-Programm läuft auf Windows aber nicht auf Linux(Raspberri Pi4) Java Basics - Anfänger-Themen 22
G Programm Code Java Basics - Anfänger-Themen 5
CptK Achsenskalierung in Koordinatensystem hängt Programm auf Java Basics - Anfänger-Themen 5
H Kann eine while-Schleife ein Programm blockieren? Java Basics - Anfänger-Themen 8
TimoN11 Mail Programm mit Java? Java Basics - Anfänger-Themen 1
Sajeel Chattha Dieses Programm umschreiben Java Basics - Anfänger-Themen 5
J Programm beenden ohne System.exit() oder Runtime.exit() Java Basics - Anfänger-Themen 5
F Java Programm, das kleine Buchstaben in einem String zählen soll und bei großen Buchstaben oder Sonderzeichen abbrechen soll. Java Basics - Anfänger-Themen 5
A Programm Histogram Java Basics - Anfänger-Themen 2
C Was ist nötig für ein Java-Programm auf Server für Website Java Basics - Anfänger-Themen 18
CT9288 Interaktion mit laufendem Programm -Fachbegriffe Java Basics - Anfänger-Themen 2
Gaudimagspam Assertions im Programm hinzufügen Java Basics - Anfänger-Themen 4
G Weiß jemand wie man dieses Programm schreibt? Java Basics - Anfänger-Themen 84
C Programm ausführen ohne JRE? Java Basics - Anfänger-Themen 3
justemii Gehalt berechnen - Aufgabe Java-Programm Java Basics - Anfänger-Themen 9
N Best Practice How can I creat a programm with java under windows 10 in order to open an spreadsheet in libreoffice calc format Java Basics - Anfänger-Themen 11
W Programm dass Palindrome erkennt Java Basics - Anfänger-Themen 6
K Erste Schritte Programm geht aus Schleife, warum? Java Basics - Anfänger-Themen 2
P Wie für EIN Java Programm von 64bit Java (=Standard) auf 32bit Java Installation (Windows) umschalten? Java Basics - Anfänger-Themen 6
K Programm stoppt einfach ohne Grund Java Basics - Anfänger-Themen 4
M Rekursives Programm zum Anzeigen von Primzahlen Java Basics - Anfänger-Themen 3
X Kurzes Java-Programm, das sich komisch verhält Java Basics - Anfänger-Themen 6
Zrebna Programm kann aus der Konsole nicht gestartet werden (in der IDE läuft es) Java Basics - Anfänger-Themen 2
K Error bei meinem Programm - Hilfe Java Basics - Anfänger-Themen 8
J Programm schreiben Java Basics - Anfänger-Themen 5
T Kann jemand kurz das Programm testen? Java Basics - Anfänger-Themen 13
T Programm Schleife/if Java Basics - Anfänger-Themen 2

Ähnliche Java Themen


Oben