Kleine Frage zu OOP

Es ist doch wirklich ganz einfach:

Java:
Haus(String adresse,  Person besitzer, int anzahlWohneinheiten){
    ...
    anzahlWohneinheiten = bewohner.length; // Welcher Variablen wird hier etwas zugewiesen?
    ...
}

Welcher Variablen wird hier etwas zugewiesen?

Und behaupte bloß nicht wieder dass alles richtig ist!
 
Also laut #141 bewirkt der erste code das x 1 gesetzt wird wenn x kleiner als 1 ist,
Und der zweite code deklariert dann x = bewohner.lenght bzw 1 = bewohner.lenght
 
in der methode doSomething wird überprüft ob x kleiner eins ist und im Konstruktor haus ist x die Länge des arrays d.h. die Länge des Arrays ist eins
 
@mihe
Java:
1.
void doSomething(int x) {  // hier wird die Bedingung festgelegt, falls x kleiner eins sein sollte, soll es der 1 gleichgesetzt werden. 
   if (x < 1) {
       x = 1;
   }
}
2.
Haus(int x) {
    x = bewohner.length;
}
Hier wird dem x die Länge des Bewohnerarrays zugewiesen.
 
@jono In #159 hast Du die Fragen schon mal nicht falsch beantwortet. Ein wesentlicher Punkt:

Nein @jono man soll das Array im Konstruktor definieren.

Ihr greift auf ein Array zu, das noch gar nicht(*) initialisiert ist. Welchen Wert hat bewohner also zu diesem Zeitpunkt? Richtig, null. Folglich wird beim Versuch, auf die Längen-Eigenschaft des bewohner-Arrays (bewohner.length) eine NullPointerException auftreten. Das war die Frage zu 2.

Bei der Frage zu 1.: x ist ein Parameter. Dem wird nun ein Wert zugewiesen. Was soll das bringen?

EDIT: (*) das war von mir schlampig formuliert. Es wurde noch kein Array erzeugt. Die Instanzvariable bewohner ist selbstverständlich mit null initialisiert.
 
Wir haben den Array schon oberhalb des Konstruktors definiert.
Dann bitte noch einmal anschauen, wie man ein Array deklariert und wie man es initialisiert. Was ihr habt ist nur eine Deklaration. Daher kommt auch die NullPointerException, wenn ihr darauf zugreift.
Wie initialisiert man ein Array mit einer bestimmten Länge?
 
Java:
Haus(String adresse,  Person besitzer, int anzahlWohneinheiten, Familie[] bewohner){
        this.adresse=adresse;
        this.besitzer=besitzer;
        
        
        this.bewohner = new Familie[anzahlWohneinheiten];
        anzahlWohneinheiten=bewohner.length;
        
        if(anzahlWohneinheiten<1) {
            anzahlWohneinheiten=1;
        }
        
        
        
    }
Das hatte ich schon die ganze Zeit
 
Java:
 this.bewohner = new Familie[anzahlWohneinheiten];
        anzahlWohneinheiten=bewohner.length;
auf die Zeile die vorher überhalb der Array Initialisierung stand
 
Das hatte ich schon die ganze Zeit
Dann ist Punkt 2 bei Dir auch kein Problem. Bleibt Punkt 1: was bringt es, wenn Du dem Parameter anzahlWohneinheiten die Länge des Arrays zuweist?

auf die Zeile die vorher überhalb der Array Initialisierung stand
Ja. Im Folgenden gehe ich von dem Code aus #182 aus. Sprich: die Frage bleibt, was es bringt, einem Parameter einen Wert zuzuweisen.
 
Java:
 * Implementieren Sie einen Konstruktor mit adresse, besitzer und anzahlWohneinheit als Parameter.
Haus(String adresse,  Person besitzer, int anzahlWohneinheiten, Familie[] bewohner){ // Familie[]bewohner muss raus
 
Java:
* Implementieren Sie einen Konstruktor mit adresse, besitzer und anzahlWohneinheit als Parameter.
Haus(String adresse,  Person besitzer, int anzahlWohneinheiten, Familie[] bewohner){ // Familie[]bewohner muss raus
BTW: genau das ist das Prinzip: sich zu 100 % an die Aufgabenstellung halten. Die sind am Anfang so genau geschrieben, dass man sie fast 1:1 in Code übersetzen kann, wie man an diesem Beispiel sieht.
 
Gute Frage, da man das Array schon initialisiert hat , ist die Länge des Bewohnerarrays sowieso schon durch die anzahlWohneinheiten definiert
 
Und bezogen auf den Code von #182: Ruft mal die Methode mit anzahlWohneinheiten = -10 auf oder spielt diesen Aufruf mal gedanklich durch.
 

Neue Themen


Zurück
Oben