#OOP creating a Person and optional assignments.
1 messages · Page 1 of 1 (latest)
⌛ This post has been reserved for your question.
Hey @topaz maple! Please use
/closeor theClose Postbutton above when you're finished. Please remember to follow the help guidelines. This post will be automatically closed after 300 minutes of inactivity.
TIP: Narrow down your issue to simple and precise questions to maximize the chance that others will reply in here.
_ _
_ _
_ _
I am adding a new Person to an array defined in Person.java with
Person.addperson("Max", "Armstrong");```
_ _
_ _
_ _
Some people have tasks.
If I have added such a person and if I want to add the tasks I want to look for a Person with that name in my array in Person.java.
Strings immer mit .equals vergleichen
Person.starttasks("Max");```
Should look for Max in the array defined in Person.java.
Now after I found Max in the array in Person.java: "persons[i]" I want to add the tasks
persons[i] = new Task("status1", "status2", "status3");```
Am I right to assume that the Person "Max" will then have
task1 = "status1"
task2 = "status2"
task3 = "status3"
Streng genommen ist Person nicht vom typ String, du müsstest also vor oder Nachname mit dem gesuchten String vergleichen
Das wird einen compile fehler hervorrufen. Du kannst Task nicht zu Person konvertieren. Eine Person müsste ein Feld haben welches dann die Task aufnehmen kann.
Das wäre eine Möglichkeit
Wie schon gesagt diese Zeile persons[i] = new Task("status1", "status2", "status3"); wird nicht funktionieren. Die Klasse Person müsste ein Feld vom Typ Task haben, damit die neue Task hinzugefügt werden kann
Kann ich denn ein unbefülltes Feld im Konstruktor haben?
Du musst ein Feld nicht unbedingt initialisieren
Kannst du mir ein Beispiel geben?
class Person {
public static Person[] persons = new Person[10];
private final String firstName;
private final String lastName;
private Task task; //task wird nicht im Konstruktor initialisiert und bleibt null
public Person(String firstName, String lastName) {
this.firstName = firstName;
this.lastName = lastName;
}
...
public Task getTask() {
return task;
}
public void setTask(Task task) {
this.task = task; //Erst nach dem erstmaligen aufrufen von setTask wird task einem Wert zugewiesen.
}
sorry war noch dabei kannst du ignorieren.
ja
Okaaay. Also
Hat geholfen das du sagtest das ich das Feld nicht initialisieren muss.
Ich kann jetzt eine Aufgaben Box hinzufügen.
task1 = "status1"
task2 = "status2"
task3 = "status3"
Jetzt muss nur noch die tasks ändern können.
einzelne Tasks in einem Task object oder das gesamte Task objekt, welches einer Person zugewiesen wird ?
Im Prinzip mache ich nur das. 🙂
dann also mit gettern und settern arbeiten
Jap.
Kannst du mir eben sagen wie ich auf task1 zugreifen kann?
persons[i].taskbox.task1 war meine Idee.
ja theoretisch richtig praktisch nie ohne getter auf variablen aus anderen klassen zugreifen.
Wieso darf ich nie ohne getter auf Variablen aus anderen Klassen zugreifen 😦
also
(In der Task klasse)
public String getTask1() {
return task1;
}
Ja und wenn ich task1 ändern will?
In diesem Artikel erfährt man mehr über die Datenkapselung und das Geheimnisprinzip, die in Java als objektorientierte Programmiersprache zur Anwendung kommen.
setter für task 1
da wird ziemlich viel boilerplate entstehen
# Main.java```
```java
Person.settask1("Max", "Stufe 3");```
So soll das am Ende aussehen.
_ _
_ _
_ _
Setter vermutlich;
```md
# Person.java```
```java
public void settask1(String task1) {
this.task1 = task1;
}```
settask1 ist dann aber ein Teil der Task klasse und du brachst nicht die person mitzugeben, da du mit der Instanz auf die Task überhaupt zugreifst
Person.settask1(Argument, Argument) ist das Format das ich brauche um
1.) Auf die richtige Person in dem Array von Person.java zuzugreifen.
2.) Um den Status zu ändern.
Also so soll am Ende der Befehl aussehen der die Änderung einleitet.
also settask1 ist static und soll kein Teil von Task sein ?
Okay, also ich kann jetzt den Status ändern.
Allerdings nur solange ich
public String task1, task2, task3;```
Public mache.
Ich muss allerdings den Status private setzen.
Wie kann ich auf private attribute zugreifen und sie ändern?
mit eben benannten gettern und settern
Uff does not work.
Basicly I am doing this loop:
for (int i = 0; i < persons.length; i++) {
if (persons[i] != null) {
if (persons[i].firstname.equals(searched)) {```
until I find the right name "Max".
So now I have the correct Person-Object: java persons[i]
Then I am just trying to access the taskbox.
persons[i].taskbox```
That works.
Then I want to access a task in the taskbox.
persons[i].taskbox.task1```
That will not work because the attributes are private (they must stay private)-
If I would do:
public String task1, task2, task3;```
It will work, but that is not allowed.
So I do;
private String task1, task2, task3;```
I tried to do within
# Task.java```
```java
public void settask1(String task1) {
this.task1 = task1;
}
public void settask2(String task2) {
this.task2 = task2;
}
public void settask3(String task3) {
this.task3 = task3;
}```
I have no idea how I can overwrite any task.
@spark gorge
setter sind richtig. persons[i].taskbox.settask1(task)
Okay funktioniert.
Jetzt würde ich noch gern getter besser verstehen.
Ich versuche jetzt einmal über einen getter task3 auszulesen.
Jap. hat alles funktioniert.
Jetzt muss ich nur noch das was ich gelernt habe in der Hausarbeit umsetzen.
💪
Easy.
Herzlichen Dank @spark gorge! ❤️
immer gerne 🙂
@spark gorge was bringt eigentlich im Konstruktor:
super();
und
this();
super() -> Ruft den Konstruktor der Superklasse, also der Klasse von der geerbt wird auf.
this() -> Ruft einen eigenen Konstruktor der Klasse auf mit abweichenden Parametern. So etwas wird constructor chaining genannt
super ist in der Vererbung wichtig. this() hilft dabei überflüssigen Code zu vermeiden.
Ah 🙂