Kleine Frage zu OOP

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;
        }
       
       
       
    }

Dann teste doch einmal, was passiert, wenn Du anzahlWohneinheiten beim Aufruf -1 oder so mitgibst.

Also wenn ihr einen Code habt, dann testet ihn doch. Wenn ihr eine NPE bekommt oder das Ergebnis nicht stimmt, dann habt ihr was falsch gemacht. Wenn ihr hier von einem Fehler redet ("Ich bekomme da eine NPE"), dann sagt bitte auch, wenn ihr so ein Problem gelöst bekommt.
 
Java:
 Implementieren Sie einen Konstruktor mit adresse, besitzer und anzahlWohneinheit als Parameter.
Die Adresse und der Besitzer sollen übernommen werden.
Dachte dass kein Wert aufgrund dieser Aussage zugewiesen werden soll bzw. kein this.anzahlWohneinheiten instanziiert werden soll
 
Wir sollten noch ni
Dann teste doch einmal, was passiert, wenn Du anzahlWohneinheiten beim Aufruf -1 oder so mitgibst.

Also wenn ihr einen Code habt, dann testet ihn doch. Wenn ihr eine NPE bekommt oder das Ergebnis nicht stimmt, dann habt ihr was falsch gemacht. Wenn ihr hier von einem Fehler redet ("Ich bekomme da eine NPE"), dann sagt bitte auch, wenn ihr so ein Problem gelöst bekommt.
Danke für alles Leute aber ich versuche gerade meine AssertionErros zu lösen, aber geht auch nicht so wie ich es will in der class Familie.
 
Java:
Implementieren Sie einen Konstruktor mit adresse, besitzer und anzahlWohneinheit als Parameter.
Die Adresse und der Besitzer sollen übernommen werden.
Dachte dass kein Wert aufgrund dieser Aussage zugewiesen werden soll bzw. kein this.anzahlWohneinheiten instanziiert werden soll

Ja, du könntest recht haben. Allerdings gibt es ja diese Instanzvariable. Wird sie vielleicht in einer anderen Aufgabe zugewiesen?

Müsst ihr halt noch mal schauen, das ist von hier nicht zu klären. Übrigens "instanziiert" ist in diesem Fall das falsche Wort.

Aber ihr werden auf jeden Fall einen Fehler erhalten, wenn ihr den Konstruktor mit einer negativen Anzahl von Wohneinheiten aufruft. Das wurde hier auch schon diskutiert, warum das so ist: Eure Kontrolle, ob der Parameter kleiner als 1 ist findet statt, wenn das Array bereits erzeugt wurde (bzw. der Versuch unternommen wird).
 
Ja, du könntest recht haben. Allerdings gibt es ja diese Instanzvariable. Wird sie vielleicht in einer anderen Aufgabe zugewiesen?

Müsst ihr halt noch mal schauen, das ist von hier nicht zu klären. Übrigens "instanziiert" ist in diesem Fall das falsche Wort.

Aber ihr werden auf jeden Fall einen Fehler erhalten, wenn ihr den Konstruktor mit einer negativen Anzahl von Wohneinheiten aufruft. Das wurde hier auch schon diskutiert, warum das so ist: Eure Kontrolle, ob der Parameter kleiner als 1 ist findet statt, wenn das Array bereits erzeugt wurde (bzw. der Versuch unternommen wird).
Ja beim an und abmelden kommt auch ein assertionerror
 
Mal zusammenfassend:
Java:
    Haus(String adresse,  Person besitzer, int anzahlWohneinheiten){
        this.adresse=adresse;
        this.besitzer=besitzer;
       
        if(anzahlWohneinheiten<1) {
            // die Zuweisung an den Parameter ist nicht die feine Art,
            // bringt hier aber was, weil der Wert gleich noch 
            // verwendet wird.
            anzahlWohneinheiten=1;          
        }
       
        this.bewohner = new Familie[anzahlWohneinheiten];
        // ggf. noch
        // this.anzahlWohneinheiten = anzahlWohneinheiten;
    }
 
Java:
/root/autocorrectorj3tUTvdir/PublicTests.java:19: error: incompatible types: Person cannot be converted to int
		Haus h = new Haus("Das ist die Adresse", p1, 2);
		                                         ^
/root/autocorrectorj3tUTvdir/PublicTests.java:43: error: incompatible types: Person cannot be converted to int
		Haus h1 = new Haus("Adresse", besitzer, 3);
		                              ^
/root/autocorrectorj3tUTvdir/PublicTests.java:79: error: incompatible types: Person cannot be converted to int
		Haus h1 = new Haus("Endlosstr. 5, Im Nimmerland", besitzer, 3);
		                                                  ^
/root/autocorrectorj3tUTvdir/PublicTests.java:97: error: incompatible types: Person cannot be converted to int
		Haus h2 = new Haus("Endlosstr. 2, Im Nimmerland", besitzer, 3);
		                                                  ^
 
Was ist an meinem class Familie falsch
Java:
public class Familie {

    private String name;
    private Haus meldung;
    private Person[] familienmitglieder;
    
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public Haus getMeldung() {
        return meldung;
    }
    public void setMeldung(Haus meldung) {
        this.meldung = meldung;
    }
    public Person[] getFamilienmitglieder() {
        return familienmitglieder;
    }
    public void setFamilienmitglieder(Person[] familienmitglieder) {
        this.familienmitglieder = familienmitglieder;
    }
    
    
    
    Familie(String name, Haus meldung, Person[] familienmitglieder){
        this.name=name;
        this.meldung=meldung;
        this.familienmitglieder=familienmitglieder;
        
    }
    
    

    public boolean ummelden(Haus meldung) {
        if(meldung.anmelden(this)&&meldung.abmelden(this)==true) {
            return true;
        }
        if(meldung.anmelden(this)==true && meldung.abmelden(this)==false) {
            meldung.abmelden(this);
        }
        return false;
    }
    
}
Bekomme immer diese Fehlermeldung
Java:
1) testFamilie(PublicTests)
java.lang.AssertionError
    at org.junit.Assert.fail(Assert.java:86)
    at org.junit.Assert.assertTrue(Assert.java:41)
    at org.junit.Assert.assertTrue(Assert.java:52)
    at PublicTests.testFamilie(PublicTests.java:104)
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.base/java.lang.reflect.Method.invoke(Method.java:566)
    at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50)
    at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
    at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:52)
    at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
    at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325)
    at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:78)
    at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:57)
    at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
    at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
    at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
    at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
    at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
    at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
    at org.junit.runners.Suite.runChild(Suite.java:128)
    at org.junit.runners.Suite.runChild(Suite.java:27)
    at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
    at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
    at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
    at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
    at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
    at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
    at org.junit.runner.JUnitCore.run(JUnitCore.java:137)
    at org.junit.runner.JUnitCore.run(JUnitCore.java:115)
    at org.junit.runner.JUnitCore.runMain(JUnitCore.java:77)
    at org.junit.runner.JUnitCore.main(JUnitCore.java:36)
2) testHaus(PublicTests)
java.lang.AssertionError: expected:<2> but was:<0>
    at org.junit.Assert.fail(Assert.java:88)
    at org.junit.Assert.failNotEquals(Assert.java:834)
    at org.junit.Assert.assertEquals(Assert.java:645)
    at org.junit.Assert.assertEquals(Assert.java:631)
    at PublicTests.testHaus(PublicTests.java:22)
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.base/java.lang.reflect.Method.invoke(Method.java:566)
    at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50)
    at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
    at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:52)
    at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
    at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325)
    at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:78)
    at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:57)
    at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
    at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
    at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
    at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
    at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
    at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
    at org.junit.runners.Suite.runChild(Suite.java:128)
    at org.junit.runners.Suite.runChild(Suite.java:27)
    at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
    at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
    at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
    at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
    at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
    at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
    at org.junit.runner.JUnitCore.run(JUnitCore.java:137)
    at org.junit.runner.JUnitCore.run(JUnitCore.java:115)
    at org.junit.runner.JUnitCore.runMain(JUnitCore.java:77)
    at org.junit.runner.JUnitCore.main(JUnitCore.java:36)
3) testAnAbmelden(PublicTests)
java.lang.AssertionError
    at org.junit.Assert.fail(Assert.java:86)
    at org.junit.Assert.assertTrue(Assert.java:41)
    at org.junit.Assert.assertTrue(Assert.java:52)
    at PublicTests.testAnAbmelden(PublicTests.java:58)
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.base/java.lang.reflect.Method.invoke(Method.java:566)
    at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50)
    at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
    at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:52)
    at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
    at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325)
    at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:78)
    at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:57)
    at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
    at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
    at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
    at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
    at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
    at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
    at org.junit.runners.Suite.runChild(Suite.java:128)
    at org.junit.runners.Suite.runChild(Suite.java:27)
    at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
    at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
    at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
    at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
    at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
    at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
    at org.junit.runner.JUnitCore.run(JUnitCore.java:137)
    at org.junit.runner.JUnitCore.run(JUnitCore.java:115)
    at org.junit.runner.JUnitCore.runMain(JUnitCore.java:77)
    at org.junit.runner.JUnitCore.main(JUnitCore.java:36)
 
Zu #210: mindestens mal das gleiche Problem wie vorhin: schaut Euch die Parameternamen und die Namen der Instanzvariablen an. Was soll das hier bringen:
Java:
    public boolean ummelden(Haus meldung) {
        if(meldung.anmelden(this)&&meldung.abmelden(this)==true) {
Ihr meldet Euch erstmal an und dann wieder ab. Den Vergleich mit true könnt Ihr Euch sparen.
 
* Die "Familie" hat folgende private-Eigenschaften #
* - "name" vom Typ String
* - "meldung" vom Typ Haus
* - "familienmitglieder" vom Typ Person-Array *
* Erstellen Sie Standard Getter und Setter für alle Eigenschaften. * (Bitte automatisch generieren lassen!) *
* Implementieren Sie einen Konstruktor mit name, meldung und familienmitglieder als Parameter.
* Die Parameter-Werte vom Konstruktor sollen bei den Klasseneigenschaften übernommen werden. *
* Implementieren Sie eine public-Methode "ummelden",
* der die Familie vom alten Haus abmeldet und in ein neues Haus anmeldet.
* Die public-Methode "ummelden" erhält ein Haus und gibt ein boolean zurück.
* Die Methode liefert nur dann true, wenn das Anmelden und Abmelden funktioniert hat und
* die Meldung aktualisiert wurde.
* Wenn zum Beispiel die Anmeldung funktioniert aber die Abmeldung nicht, dann muss die Anmeldung
* wieder rückgängig gemacht werden, bevor false zurückgegeben wird. *
* Zum An- und Abmelden kann die Methode aus Haus verwendet werden
* z.B. meldung.abmelden(this); würde dieses Objekt von dem gemeldeten Haus abmelden. *
Das habe ich doch gemacht laut meiner Aufgabe
 
Java:
/root/autocorrectorj3tUTvdir/PublicTests.java:19: error: incompatible types: Person cannot be converted to int
		Haus h = new Haus("Das ist die Adresse", p1, 2);
		                                         ^
/root/autocorrectorj3tUTvdir/PublicTests.java:43: error: incompatible types: Person cannot be converted to int
		Haus h1 = new Haus("Adresse", besitzer, 3);
		                              ^
/root/autocorrectorj3tUTvdir/PublicTests.java:79: error: incompatible types: Person cannot be converted to int
		Haus h1 = new Haus("Endlosstr. 5, Im Nimmerland", besitzer, 3);
		                                                  ^
/root/autocorrectorj3tUTvdir/PublicTests.java:97: error: incompatible types: Person cannot be converted to int
		Haus h2 = new Haus("Endlosstr. 2, Im Nimmerland", besitzer, 3);
		                                                  ^
Wie gehe ich jetzt damit lösungsorientiert um ?
 
* Die "Familie" hat folgende private-Eigenschaften #
* - "name" vom Typ String
* - "meldung" vom Typ Haus
* - "familienmitglieder" vom Typ Person-Array *
* Erstellen Sie Standard Getter und Setter für alle Eigenschaften. * (Bitte automatisch generieren lassen!) *
* Implementieren Sie einen Konstruktor mit name, meldung und familienmitglieder als Parameter.
* Die Parameter-Werte vom Konstruktor sollen bei den Klasseneigenschaften übernommen werden. *
* Implementieren Sie eine public-Methode "ummelden",
* der die Familie vom alten Haus abmeldet und in ein neues Haus anmeldet.
* Die public-Methode "ummelden" erhält ein Haus und gibt ein boolean zurück.
* Die Methode liefert nur dann true, wenn das Anmelden und Abmelden funktioniert hat und
* die Meldung aktualisiert wurde.
* Wenn zum Beispiel die Anmeldung funktioniert aber die Abmeldung nicht, dann muss die Anmeldung
* wieder rückgängig gemacht werden, bevor false zurückgegeben wird. *
* Zum An- und Abmelden kann die Methode aus Haus verwendet werden
* z.B. meldung.abmelden(this); würde dieses Objekt von dem gemeldeten Haus abmelden. *
Das habe ich doch gemacht laut meiner Aufgabe

Bedenke dabei, dass es zwei Variablen mit dem Namen "meldung" gibt! Eine Instanzvariable und einen Parameter. Bei einer muss man sich abmelden, bei der anderen anmelden.
 
@jono Indem Du Dir die Klasse Haus und dort insbesondere die Signatur des Konstruktors ansiehst. Wenn man mal davon ausgeht, dass das Haus überall verwendet und erzeugt werden kann, müssen die Klasse und der Konstruktor public sein. Außerdem muss der zweite Parameter vom Typ Person sein.
 
Vermutlich ist der Konstruktor von Haus bei dir falsch, denn dein zweiter Parameter scheint vom Typ und zu sein und nicht von Person.
 
Wenn Ihr weiter so planlos rumprobiert, wird es bald heißen:
Java:
immatrikulationsamt.abmelden(jono);
immatrikulationsamt.abmelden(xknight);
SCNR.
 
Java:
public boolean ummelden(Haus meldung) {
		if(meldung.anmelden(this)&&meldung.abmelden(this)) {
			return true;
		}
		if(meldung.anmelden(this)==true && meldung.abmelden(this)==false) {
			meldung.abmelden(this);
		}
		return false;
	}
(/Code]

Wie meinst du das "Nein. Du meldest Dich bei der selben "meldung" an und ab."?
 
Du bekommst ein Haus als "meldung" übergeben. Und bei diesem(!) Haus meldest Du dich an (meldung.anmelden(this)) und wenn das funktioniert hat wieder ab (meldung.abmelden(this)). Das ist ja wohl nicht Sinn der Sache.
 
Es geht jetzt noch nicht um das else sondern darum, dass Du Dich beim selben Haus ab- und wieder anmeldest: was soll das bringen?
 
OMG. Schreib mal zwei Zeilen, die das folgende machen:
1. melde die Familie beim alten Haus ab
2. melde die Familie beim neuen Haus an
(keine ifs, nur die Ab- und Anmeldung)
 

Neue Themen


Zurück
Oben