#OOP creating a Person and optional assignments.

1 messages · Page 1 of 1 (latest)

frank ivyBOT
#

This post has been reserved for your question.

Hey @topaz maple! Please use /close or the Close Post button 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.

topaz maple
#

_ _
_ _
_ _
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.

spark gorge
#

Strings immer mit .equals vergleichen

topaz maple
#
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"

spark gorge
#

Streng genommen ist Person nicht vom typ String, du müsstest also vor oder Nachname mit dem gesuchten String vergleichen

topaz maple
#

persons[i].getvorname().equals(searched)

#

So?

spark gorge
spark gorge
#

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

topaz maple
#

Kann ich denn ein unbefülltes Feld im Konstruktor haben?

spark gorge
#

Du musst ein Feld nicht unbedingt initialisieren

topaz maple
#

Kannst du mir ein Beispiel geben?

spark gorge
#
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.
    }
topaz maple
#

private final String?

#

Was bringt das?

spark gorge
#

sorry war noch dabei kannst du ignorieren.

topaz maple
#

Okay 😄

#

Also das final kann ich weglassen?

spark gorge
#

ja

topaz maple
#

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.

spark gorge
#

einzelne Tasks in einem Task object oder das gesamte Task objekt, welches einer Person zugewiesen wird ?

topaz maple
#

Im Prinzip mache ich nur das. 🙂

spark gorge
#

dann also mit gettern und settern arbeiten

topaz maple
#

Jap.

#

Kannst du mir eben sagen wie ich auf task1 zugreifen kann?

#

persons[i].taskbox.task1 war meine Idee.

spark gorge
#

ja theoretisch richtig praktisch nie ohne getter auf variablen aus anderen klassen zugreifen.

topaz maple
#

Wieso darf ich nie ohne getter auf Variablen aus anderen Klassen zugreifen 😦

spark gorge
#

also

(In der Task klasse)
public String getTask1() {
return task1;
}
topaz maple
#

Ja und wenn ich task1 ändern will?

spark gorge
spark gorge
#

da wird ziemlich viel boilerplate entstehen

topaz maple
#
# 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;
}```
spark gorge
topaz maple
#

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.

spark gorge
topaz maple
#

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?

spark gorge
#

mit eben benannten gettern und settern

topaz maple
#

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

spark gorge
topaz maple
#

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! ❤️

spark gorge
#

immer gerne 🙂

topaz maple
#

@spark gorge was bringt eigentlich im Konstruktor:
super();
und
this();

spark gorge
#

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

topaz maple
#

Was für Usecases gibt es dafür?

#

Also wann brauche ich die?

spark gorge
#

super ist in der Vererbung wichtig. this() hilft dabei überflüssigen Code zu vermeiden.

topaz maple
#

Ah 🙂