Wie lautet der Parameter für das Objekt?

5 Antworten

Was ist denn genau das Problem? Ich sehe da keinen Fehler Oo

Datum ist vom Typ Date und das sollte eigentlich passen


JasonTheBeast 
Beitragsersteller
 15.12.2019, 00:04

Die letzte Zeile gibt nicht das Datum an, sonder nur den Speicherplatz

0
FouLou  14.12.2019, 23:54

Eine Sache könnte ein Problem sein.

Es gibt bereits ne Klasse Date in Java. (Bin mir nicht ganz sicher ob die wirklich Date heisst)

Du implementierst aber die Klasse Date selbst. Ist nie ne gute Idee Klassen zu schreiben die es so nochmal irgendwo gibt.

Nenn deine eigene Klasse Date einfach um. Z.b. in MyDate. Oder in Datum. Dann kommt der Compiler eventuell nicht durcheinander.

Ggf. Kannst du auch das package vorher angeben damit der Compiler weiss das du dein eigenes Date meinst und nicht das vom jdk. Wie genau man das in Java weiss ich allerdings nicht mehr.

0
regex9  15.12.2019, 00:09
@FouLou

Du meinst die Klasse java.util.Date. Der Compiler kommt in dem Fall nicht durcheinander.

0

geburtsdatum ist nur ein Name. Der Name der Variable, die du als Argument überreichst, muss nicht mit dem Parameternamen übereinstimmen. Das habe ich dir in einer deiner vorherigen Fragen bereits erklärt.

Schau hier:

class Date {
  public Date(int day, int month, int year) {
    System.out.printf("%d.%d.%d", day, month, year);
  }
}

// main:
int max = 21;
int marie = 3;
int josefine = 2001;
Date koffer = new Date(max, marie, josefine); // => 21.3.2001

Ich habe im unteren Teil bewusst absurde Bezeichner gewählt. Die Werte der einzelnen Variablen werden in Java implizit in die Parameter kopiert, die die Methode (bzw. hier der Konstruktor) definiert.

Ein Versuch der Verbildlichung:

public Date(int day = max, int month= marie, int year = josefine) {
  // ...
}

Wenn man sich nun bei dir die Zeilen 13, 36, 39 und 12 (in Date.java) anschaut, sieht man, dass du gemäß deines Date-Konstruktors ein Datumsobjekt anlegst und dieses gemäß des Person-Konstruktors als drittes Argument übergibst, um ein Objekt der Klasse Person anzulegen. Das ist alles korrekt. Wenn du einen Fehler hast, liegt der nun woanders.


JasonTheBeast 
Beitragsersteller
 15.12.2019, 00:12

Jap hatte woanders noch einen Fehler, musste in die Methode asString der Klasse Person noch ein .toString(); hinter geburtsdatum setzen, trotzdem danke!

0
regex9  15.12.2019, 00:13
@JasonTheBeast

Wieso toString? Du hast dir doch explizit asString für diesen Fall in beiden Klassen implementiert.

0

Wieso soll das falsch sein?


JasonTheBeast 
Beitragsersteller
 15.12.2019, 00:03

Die letzte Zeile gibt nicht das Datum an, sonder nur diesen Speicherplatz

0
threadi  15.12.2019, 00:04
@JasonTheBeast

Nein. Das Datum ist ein Objekt und das wird auch als solches verwendet. Alles korrekt so.

0

Für mich sieht das richtig aus, weil die Variable datum ein Objet vom Typ Datum ist. Siehe Zeile 36. Warum soll das nicht richtig sein?


JasonTheBeast 
Beitragsersteller
 15.12.2019, 00:02

Wenn ich diese jedoch ausgeben möchte, wird nur der lokale speicher angezeigt

0
regex9  15.12.2019, 00:12
@USAfirefighter

In dem Fall wäre sowohl für Date als auch für Person der Aufruf von asString korrekt. Immerhin hat sich der FS diese Methoden extra für eine Ausgabe implementiert.

0
USAfirefighter  15.12.2019, 00:14
@regex9

@regex9 asString() ruft aber nicht die toString() methoden anderer Objekte auf, dadurch wird beim Date die Speicheradresse ausgegeben

0
regex9  15.12.2019, 00:16
@USAfirefighter

Schau dir die obige Implementation in seinen Bildern an. Seine beiden Klassen Date und Person haben jeweils eine asString-Methode implementiert, die jeweils die Attribute in Printform zurückgibt.

1
USAfirefighter  15.12.2019, 00:21
@USAfirefighter

@regex9 aaaah ja jetzt sehe ich es. Wird die denn überhaupt bei einem Aufruf von person.asString() aufgerufen?

0
regex9  15.12.2019, 03:20
@USAfirefighter

Das muss er noch ergänzen (habe ich ihn in einem der oberen Kommentare schon geschrieben).

1

So kannst du kein Date Objekt mit dem entsprechenden Datums wert erzeugen, hier sind ein paar (Beispiel) Wege um es korrekt zu machen:

Date date = new GregorianCalendar(2000, Calendar.FEBRUARY, 11).getTime();

--

oder mit einer Hilfsfunktion und Date Format:

 public static Date parseDate(String date) {
     try {
         return new SimpleDateFormat("dd-MM-yyyy").parse(date);
     } catch (ParseException e) {
         return null;
     }
  }

Verwenden mit:

Date myDate = parseDate("14-02-2000");

LG

Woher ich das weiß:Studium / Ausbildung – Gelernter Fachinformatiker, Freiberufl. Softwareentwickler

FouLou  14.12.2019, 23:51

Türil kann er das in Diesem Fall weil er die Klasse Date selbst geschrieben hat.

Es könnte der Fall sein das der Compiler durcheinander kommt weil es eventuell ne Klasse Date im jdk gibt.

0
JasonTheBeast 
Beitragsersteller
 15.12.2019, 00:05
@FouLou

Die letzte Zeile gibt nicht das Datum an, sonder nur diesen Speicherplatz

Das ist das eigentliche Problem

0
regex9  15.12.2019, 00:07
@JasonTheBeast

Rufe in der asString-Methode der Person-Klasse noch für das Datum asString auf.

return nachname + /* usw. ... */ + geburtsdatum.asString();
1