Danke @temi ,somit weiß ich für das nächste Mal Bescheid wie ich bei einem ähnlichen Problem eventuell vorgehen kann. Ja es ist schwer zu sagen ab wann man lernerfolg sehen sollte abgesehen kann man so sehen dass ich es können müsste nach den Hilfeanweisungen oder nicht, vielleicht wird es besser und da bin ich ziemlich optimistisch weil ich mir wirklich mühe gebe. Will euch ja gar nicht in dem Sinne schlecht beurteilen das hat damit ja gar nichts zu tun, das ist ja denke ich auch klar.
Eine Frage hätte ich da noch zu der vorher beschriebenen Fehlermeldung, warum habe ich da eine nullpointerexception?
Witzig! Ich nehme mal an es handelt sich um Kommilitonen...
Java:
Haus(String adresse,Person besitzer,int anzahlWohneinheiten){this.adresse = adresse;this.besitzer = besitzer;
anzahlWohneinheiten = bewohner.length;// Welcher Variablen wird hier etwas zugewiesen?this.bewohner =newFamilie[anzahlWohneinheiten];if(anzahlWohneinheiten <1){// Was soll das bezwecken?
anzahlWohneinheiten =1;}}
Laut der Aufgabe bestimmt die azahlWohneinheiten die Länge des Arrays und wenn die anzahlWohneinheiten kleiner eins ist soll anzahlWohneinheiten eins sein.
Das soll damit gemeint sein. Darum sehe ich im Konstruktor keine Fehler.
Laut der Aufgabe bestimmt die azahlWohneinheiten die Länge des Arrays und wenn die anzahlWohneinheiten kleiner eins ist soll anzahlWohneinheiten eins sein.
Das soll damit gemeint sein. Darum sehe ich im Konstruktor keine Fehler.
In der Methode anmelden() sollen wir in einer freien Stellen einen Bewohner hinzufügen.
So lautet mein Quellcode.
Da sehe ich keinen Fehler.
Code:
public boolean anmelden(Familie someFam) {
for(int i = 0; i < bewohner.length; i++) {
if(bewohner[i] == null) {
bewohner[anzahlWohneinheiten++] = someFam;
}
}
for (int i = 0; i < bewohner.length-1; ++i)
for (int j = i+1; j < bewohner.length; ++j)
if (bewohner[i] == bewohner[j]) {
return false;
}
return true;
}
Mit dieser Abfrage überprüfe ich ob die anzahlWohneinheiten kleiner 1 ist und mit den for-Schleifen überprüfe ich ob Redundanzen im Array vorhanden sind.
Warum will hier jeder das Feld anzahlWohneinheiten hochzählen? Die Anzahl der Wohneinheiten wird im Konstruktor festgelegt und ändert sich nicht mehr. Das hier Werte über Setter-Methoden geändert werden können ist gequirlte Scheiße, aber da könnt ihr nichts dafür, dass will eure Aufgabe so. Aber soweit ich die Aufgabe für anmelden() richtig im Kopf habe, muss hier die Anzahl der Wohneinheiten dieses Hauses nicht geändert werden. Eine freie Wohneinheit soll gesucht und durch eine Familie belegt werden, sofern diese Familie nicht schon im Haus wohnt.
Da hast du recht mit den Rudandanzen, aber bei einer frei leer markierten Stelle soll ein Bewohner hinzugefügt werden und dass habe ich mit diesem code bewohner[anzahlWohneinheiten++] gemacht oder wie siehst du es?
Da hast du recht mit den Rudandanzen, aber bei einer frei leer markierten Stelle soll ein Bewohner hinzugefügt werden und dass habe ich mit diesem code bewohner[anzahlWohneinheiten++] gemacht oder wie siehst du es?
Nehmen wir mal an es gibt 10 Wohneinheiten. Du hast also ein Array "bewohner" mit der Größe 10 erstellt. Mit deinem Code weist du bewohner[10] (weil anzahlWohneinheiten = 10) eine neue Familie zu und erhöhst danach die Anzahl auf 11.
bewohner[10] verursacht eine Exception, weil der höchste Index 9 ist
Du möchtest an der freien Stelle eine Familie zuweisen. Machst du aber nicht.
Die Anzahl der Wohneinheiten soll sich nicht ändern.
Du solltest vor der Zuweisung prüfen, ob die Familie schon im Haus ist
Die überprüft ob ein Wert im Array doppelt vorkommt und wenn ja gibt er es als false zurück und wenn nicht fügt er ein Bewohner hinzu in der frei markierten Stelle
Ich schlage vor, ihr beginnt mal zu denken. Das ist echt sehr einfach (also das Problem, das Denken anscheinend nicht).
Die erste Schleife deiner ursprünglichen Lösung war schon fast richtig. Du musst nur die Familie an die richtige Stelle im Array zuweisen. Und was ist die richtige Stelle? Wo hast du denn den freien Platz gefunden?
Für die Prüfung, ob die Familie bereits existiert, kopiere die Schleife und setze sie vor der Schleife mit der Zuweisung. Dann passt du die Abfrage an und sobald eine identische Familie gefunden ist, kannst du mit return false; die Methode verlassen.
Weil du eigentlich nicht wissen willst, ob es doppelte Einträge gibt. Du möchtest wissen, ob die Familie, die angemeldet werden soll, bereits vorhanden ist. Dafür musst du nur einmal durch die bewohner schauen. Und das machst du bevor du die Familie einfügst.
In der Methode anmelden() sollen wir in einer freien Stellen einen Bewohner hinzufügen.
So lautet mein Quellcode.
Da sehe ich keinen Fehler.
Code:
public boolean anmelden(Familie someFam) {
for(int i = 0; i < bewohner.length; i++) {
if(bewohner[i] == null) {
bewohner[anzahlWohneinheiten++] = someFam;
}
}
for (int i = 0; i < bewohner.length-1; ++i)
for (int j = i+1; j < bewohner.length; ++j)
if (bewohner[i] == bewohner[j]) {
return false;
}
return true;
}
Mit dieser Abfrage überprüfe ich ob die anzahlWohneinheiten kleiner 1 ist und mit den for-Schleifen überprüfe ich ob Redundanzen im Array vorhanden sind.
Anstatt weiterzuhelfen einfach hängen lassen oder einfach mal diese Kleinigkeit vorzusagen wäre echt kein Akt, das merke ich mir und lerne auch daraus so ist es nicht aber sich so zu äußern wie ihr bringt mich auch null weiter, außerdem ist das eine kleinigkeit an der ich hänge die ich einfach nicht im stande bin zu beheben, weil ich das noch NIE gemacht habe. Der Rest ist schon alles korrekt außer das mit der Methode.
Hier geht es um die Umsetzung eines einfachen Algorithmus, den Du erstens sofort hinschreiben können müsstest und Dir @temi in #73 haarklein aufgeschrieben hat.
Noch genauer "helfen" würde bedeuten, Dir den fertigen Code zu geben. Das gibt es hier normalerweise nicht.
Haus(String adresse,Person besitzer,int anzahlWohneinheiten){...
anzahlWohneinheiten = bewohner.length;// Welcher Variablen wird hier etwas zugewiesen?...}
Also was für einen Sinn macht ein Parameter, wenn ihr den Wert ignoriert und einfach irgendwie überschreibt?
Java:
publicbooleananmelden(Familie someFam){for(int i =0; i < bewohner.length; i++){if(bewohner[i]==null){
bewohner[anzahlWohneinheiten++]= someFam;}}...}
Was macht Ihr da? Ihr sucht eine freie Stelle und dann ignoriert ihr die freie Stelle und packt es einfach woanders rein?
Das sind die Nummern der Beiträge. Findest Du oberhalb auf der Rechten Seite.
Und #130 zeigt es auch noch einmal etwas auf. Wie kann es richtig programmiert sein, wenn Du ein Argument, das vorgegeben ist, nicht verwendest?
Wie kann man fragen, ob etwas richtig ist, wenn ihr eine NullPointerException bekommen habt?
Was macht der Konstruktor? Ein Konstruktor ist doch dazu da, Dinge zu initialisieren. Wie kommt ihr auf die Idee, auf ein Element zugreifen zu können, dass noch nicht initialisiert ist?
Ach Leute. Was ist denn so schwer daran mal die Kommentare durchzulesen und dann darüber nachzudenken.
Java:
Haus(String adresse,Person besitzer,int anzahlWohneinheiten){this.adresse = adresse;this.besitzer = besitzer;
anzahlWohneinheiten = bewohner.length;// Welcher Variablen wird hier etwas zugewiesen?this.bewohner =newFamilie[anzahlWohneinheiten];if(anzahlWohneinheiten <1){// Was soll das bezwecken?
anzahlWohneinheiten =1;}}
* Implementieren Sie einen Konstruktor mit adresse, besitzer und anzahlWohneinheit als Parameter.
* Die Adresse und der Besitzer sollen übernommen werden.
* Wenn die Anzahl der Wohneinheiten kleiner als 1 sein sollte, dann soll 1 dafür verwendet werden.
* Die Anzahl der Wohneinheiten definiert die Länge des Arrays der Bewohner.
* Zu Beginn wohnen keine Bewohner und die Elemente des Arrays sind alle "null".
Also habe ich genau so programmiert im Konstruktor.
* Implementieren Sie einen Konstruktor mit adresse, besitzer und anzahlWohneinheit als Parameter.
* Die Adresse und der Besitzer sollen übernommen werden.
* Wenn die Anzahl der Wohneinheiten kleiner als 1 sein sollte, dann soll 1 dafür verwendet werden.
* Die Anzahl der Wohneinheiten definiert die Länge des Arrays der Bewohner.
* Zu Beginn wohnen keine Bewohner und die Elemente des Arrays sind alle "null".
Also habe ich genau so programmiert im Konstruktor.
* Implementieren Sie einen Konstruktor mit adresse, besitzer und anzahlWohneinheit als Parameter.
* Die Adresse und der Besitzer sollen übernommen werden.
* Wenn die Anzahl der Wohneinheiten kleiner als 1 sein sollte, dann soll 1 dafür verwendet werden.
* Die Anzahl der Wohneinheiten definiert die Länge des Arrays der Bewohner.
* Zu Beginn wohnen keine Bewohner und die Elemente des Arrays sind alle "null".
Also habe ich genau so programmiert im Konstruktor.
Ich hatte die Aufgabe auch mal und bei mir wurde die ganze Zeit auch die Fehlermeldung angezeigt …
Falls du es gelöst hast könntest mal erklären wie du es geschafft hast ? wäre echt cool