Objekt der selben Klasse wie selbst mit Aufrufen des Konstruktors erzeugen

GMS

Mitglied
Hallo 🙂
Ich habe eine Klasse Stadt und will in einer Methode dieser Klasse ein weiteres Objekt der Klasse Stadt erzeugen.
Java:
public class Stadt{
    private Stadt[] partnerstadt;
    private Buergermeister buergermeister;
    private String name;
    private int einwohnerzahl;
    private int zaehler;
   
    public Stadt(int laenge, String new_name, int einwohner){
        partnerstadt=new Stadt[laenge];
        name=new_name;
        einwohnerzahl=einwohner;
        zaehler=0;
    }
   
    public String nameGeben(){
        return name;
    }
    public void nameSetzen(String n){
        name=n;
    }
    public int eZahlGeben(){
        return einwohnerzahl;
    }
    public void eZahlSetzen(int e){
        einwohnerzahl=e;
    }
    public void partnerstadtAusgeben(int stelle){
        if(stelle>-1&&stelle<partnerstadt.length){
        System.out.println("name ist "+partnerstadt[stelle].nameGeben()+" und hat "+partnerstadt[stelle].eZahlGeben()+" Einwohner.");
    }
    }
    public void partnerstadtHinzufuegen(Stadt s){
        if(zaehler<partnerstadt.length){
            partnerstadt[zaehler]=new Stadt(int laenge, String new_name, int einwohner);
            zaehler++;
        }
}
}

Beim compilen kommt bei [..] =new Stadt(int laenge, [...]
der Fehler dass beim komma ein ; sein soll und dass vor laenge ein .class erwartet wird.
Ich verstehe nicht wo der Fehler liegt, da ich den Konstruktor doch aufrufe und die benötigten werte übergebe. Der selbe Fehler tritt dann auch in der selben Zeile bei den anderen eingangsparametern auf.

Danke für die Hilfe
Mfg
 
Ok ich habs jetzt !
Habe eine weitere Methode buergermeisterWaehlen()
Bei dieser soll ebenfalls ein neues Objekt erzeugt werden:
Der Klasse Buergermeister:
Java:
public class Buergermeister{
    private Stadt stadt;
    private Rathaus rathaus;
    private String name;
    private int alter;
   
    public Buergermeister(String new_name, int new_alter){
        alter=new_alter;
        name=new_name;
    }
}
Und zwar mit der Methode:
Java:
public void buergermeisterWaehlen( Buergermeister b, String new_name, int new_alter){
       buergermeister= new Buergermeister(new_name, new_alter);
    }

Es wird alles compiled kein Fehler jedoch beim Aufrufen der Methode wird ja ein wert für Buergermeister b erwartet und es besteht ja noch kein Objekt der Klasse Buergermeister mit welchem wert kann die methode ausgführt werden?
 
Und zwar mit der Methode:
Java:
public void buergermeisterWaehlen( Buergermeister b, String new_name, int new_alter){
       buergermeister= new Buergermeister(new_name, new_alter);
    }

Es wird alles compiled kein Fehler jedoch beim Aufrufen der Methode wird ja ein wert für Buergermeister b erwartet und es besteht ja noch kein Objekt der Klasse Buergermeister mit welchem wert kann die methode ausgführt werden?
Entweder es gibt zu dem Zeitpunkt schon einen Bürgermeister (dann solltest du das auch wissen), oder die Methoden-Signatur muss anders aussehen.
 
Entweder es gibt zu dem Zeitpunkt schon einen Bürgermeister (dann solltest du das auch wissen), oder die Methoden-Signatur muss anders aussehen.
Es wurde uns der Auftrag geben 3 Klassendiagramme in Java umzusetzen und bei buergermeisterWaehlen() steht:
+buergerneisterWaehlen(b: Buergermeister) : void
also muss es doch so umgesetzt werden?

Und es funktioniert nur falls bereits ein Objekt besteht ?
 
Es wird doch der Konstruktor aufgerufen? Und der braucht doch auch noch in diesem fall new_name und new_alter?
Der Konstruktor wird aufgerufen, weil du ihn aufrufst...
Wenn dir aber in dem Fall die Signatur aus dem Klassendiagramm egal ist, warum ist sie dann plötzlich nicht egal, wenns um den Bürgermeisterparameter geht? 😉


Die Methode bekommt einen Bürgermeister übergeben - warum erstellst du denn dann einen neuen Bürgermeister in der Methode?
 
Der Konstruktor wird aufgerufen, weil du ihn aufrufst...
Wenn dir aber in dem Fall die Signatur aus dem Klassendiagramm egal ist, warum ist sie dann plötzlich nicht egal, wenns um den Bürgermeisterparameter geht? 😉


Die Methode bekommt einen Bürgermeister übergeben - warum erstellst du denn dann einen neuen Bürgermeister in der Methode?
Weil dies dazu gesagt wurde, dass mit dieser ein neues Objekt erzeugt wird, andererseits war schon öfter ein Fehler in den Angaben dieser Lehrkraft... sogar auch schon in diesem vielleicht liegts da dran 🙂
Aber danke für die Hilfe🙂
 
Zudem: eine Stadt wird vom Bürgermeister "regiert", ein Bürgermeister "regiert" die Stadt und ist eine Person.
Eine Person hat Namen und Nachnamen. Wenn Bürgermeisterwahlen abgeschlossen sind, dann bekommt die Stadt ein Bürgermeister, ein Bürgermeister die Stadt und die Person 😉
Java:
public class Test {

 
    public static void main(String[] args) {
     
        Person person = new Person("Max", "Mustermann");
        City city = new City("Musterstadt");
        MayorOfCity mayorOfCity = new MayorOfCity(city, person);
        System.out.println(mayorOfCity);
    }
  
}
/** Konsolenausgabe */
Musterstadt, Max, Mustermann

edit:
Java:
        Person next_person = new Person("Schlimmer", "Willi");
        mayorOfCity.electionMayorOfCity(next_person);
        System.out.println(mayorOfCity);
/** Konsolenausgabe */
Musterstadt, Schlimmer, Willi
 
Eine schönere Api könnte dafür etwa sowas sein:

Java:
Person person = new Person("Max", "Mustermann");
City city = new City("Musterstadt");
city.electedMayor(person)

Irgendein "Mayor"-Objekt will man doch eher nicht erstellen (intern kann das in City aber durchaus so sein) 😉
 
Eine schönere Api könnte dafür etwa sowas sein:

Java:
Person person = new Person("Max", "Mustermann");
City city = new City("Musterstadt");
city.electedMayor(person)

Irgendein "Mayor"-Objekt will man doch eher nicht erstellen (intern kann das in City aber durchaus so sein) 😉
Stimmt eigentlich, eine City hat den Bürgermeister. Was ich vermitteln wollte, dass, wie du es geschrieben hast, ein Objekt der jeweiligen Klasse an die Methode zu übergeben ist.
 

Zurück
Oben