Dies ist eine statische Kopie unseres alten Forums. Es sind keine Interaktionen möglich.
This is a static copy of our old forum. Interactions are not possible.

mDev

Erfahrener Schreiberling

  • "mDev" is male
  • "mDev" started this thread

Posts: 282

Date of registration: Oct 10th 2002

Location: Hannover

Occupation: Wissenschaftlicher Mitarbeiter

1

Thursday, May 22nd 2003, 3:23pm

Prog2 Ü5

hallo!

kann mir einer sagen warum ich hier immer ne Nullpointer Exception bekomme? ich raffs nich...

in der klasse Arbeitnehmer:
"public void setGeburtsDatum(int gebT, int gebM, int gebJ) {
this.geburtsDatum.set(Calendar.DATE, gebT);
this.geburtsDatum.set(Calendar.MONTH, gebM);
this.geburtsDatum.set(Calendar.YEAR, gebJ);
}"
aufruf in der klasse Manager:
"setGeburtsDatum(gebT, gebM, gebJ);"

DocEvil

Trainee

  • "DocEvil" is male

Posts: 109

Date of registration: Oct 14th 2002

Location: Erschaffen aus Glut und Feuer, stärker als die Grundfesten der Erde

Occupation: CvD ;)

2

Thursday, May 22nd 2003, 4:15pm

müsste es nicht eigentlich

public void setGeburtsDatum(int gebT, int gebM, int gebJ) {
this.geburtsDatum = new GregorianCalendar(gebJ,gebM,gebT);
}

sein?
Doch weder Mensch noch Wolf noch Balrog hätte Morgoth zum Ziele geführt,
ohne den Verrat der Menschen.

---Das Silmarillion---

mDev

Erfahrener Schreiberling

  • "mDev" is male
  • "mDev" started this thread

Posts: 282

Date of registration: Oct 10th 2002

Location: Hannover

Occupation: Wissenschaftlicher Mitarbeiter

3

Thursday, May 22nd 2003, 4:30pm

ok du hast recht es geht auch so ;)

hab gar nicht dran gedacht die instanz bei jedem aufruf neu zu erzeugen...

Benjamin

Segelnder Alter Hase

  • "Benjamin" is male

Posts: 3,827

Date of registration: Oct 1st 2002

Location: Region Hannover

Occupation: Alumni

4

Thursday, May 22nd 2003, 4:33pm

@mdev
hm. ich habe es mal in meine Klassen so wie du es hast eingebaut und getestet und es geht! liegt vielleicht nicht an dem Codefragment sondern fehlt irgendwo was vor dem Aufruf oder is was an dem Aufruf der Methode falsch?

@DovEvil
wir sollten doch auch die passenden get und set-Methoden schreiben und um die set-Methode des Geburtsdatums geht es wohl.

aber mal ne andere Frage:
Warum verändert der Konstruktor Gregoriancalendar(Tag, Monat, Jahr) und die set(Tag, Monat, Jahr)-Methode der Klasse das Datum so komisch?
vorallem seh ich kein Schema da drin

edited: oh, da war wer schneller :)
Es gibt nur eine bessere Sache als auf dem Wasser zu sein: Noch mehr auf dem Wasser sein.

DocEvil

Trainee

  • "DocEvil" is male

Posts: 109

Date of registration: Oct 14th 2002

Location: Erschaffen aus Glut und Feuer, stärker als die Grundfesten der Erde

Occupation: CvD ;)

5

Thursday, May 22nd 2003, 4:42pm

Quoted

Original von metalhen

@DovEvil
wir sollten doch auch die passenden get und set-Methoden schreiben und um die set-Methode des Geburtsdatums geht es wohl.



Für mich bedeutet die passenden get/set methoden

get/set-name
get/set-vorName
get/set-geburtsDatum

und nicht set und get methoden für alle einzelnen datumsbestandteile.

naja, so hab ichs halt verstanden
Doch weder Mensch noch Wolf noch Balrog hätte Morgoth zum Ziele geführt,
ohne den Verrat der Menschen.

---Das Silmarillion---

Benjamin

Segelnder Alter Hase

  • "Benjamin" is male

Posts: 3,827

Date of registration: Oct 1st 2002

Location: Region Hannover

Occupation: Alumni

6

Thursday, May 22nd 2003, 4:53pm

Source code

1
2
3
4
5
6
[I]// Original von mDev [/I]
public void setGeburtsDatum(int gebT, int gebM, int gebJ) {
    this.geburtsDatum.set(Calendar.DATE, gebT);
    this.geburtsDatum.set(Calendar.MONTH, gebM);
    this.geburtsDatum.set(Calendar.YEAR, gebJ);
}


ist es doch auch?

setGeburtsDatum ist eine der set-Methoden die wir schreiben sollen
und in der wird doch nur eine Methode namens set benutzt die schon in der Klasse (Gregorian)Calendar existiert.
Diese ändert das Datum in der schon existiernden Instanz.

Source code

1
2
3
public void setGeburtsDatum(int gebT, int gebM, int gebJ) {
this.geburtsDatum = new GregorianCalendar(gebJ,gebM,gebT);
}


Dieses hingegen erzeugt eine neue Instanz mit dem neuen Datum und das alte landet im Nirvana und wartet auf den GarbageCollector

aber was sagt ihr zu meinem Prob mit dieser Differenz zwischen eingegebenem und ausgegebenem Datum? siehe oben. habt ihr sowas auch?

Es gibt nur eine bessere Sache als auf dem Wasser zu sein: Noch mehr auf dem Wasser sein.

mDev

Erfahrener Schreiberling

  • "mDev" is male
  • "mDev" started this thread

Posts: 282

Date of registration: Oct 10th 2002

Location: Hannover

Occupation: Wissenschaftlicher Mitarbeiter

7

Thursday, May 22nd 2003, 5:19pm

bei mir legt der monat grundsätzlich einen vor eingegebenem, so dass ich im vorfeld immer einen abziehe.

ja und wie gesagt, mit den drei set methoden gings bei mir nicht, aber wenn ich jedesmal ne neue instanz produziere läufts. irgendwer muss den garbage collector bei so schmalen programmen ja am laufen halten...

migu

free rider

  • "migu" is male

Posts: 2,643

Date of registration: Dec 11th 2001

Occupation: Developer

8

Thursday, May 22nd 2003, 6:08pm

Quoted

Original von metalhen

Source code

1
2
3
public void setGeburtsDatum(int gebT, int gebM, int gebJ) {
this.geburtsDatum = new GregorianCalendar(gebJ,gebM,gebT);
}


Dieses hingegen erzeugt eine neue Instanz mit dem neuen Datum und das alte landet im Nirvana und wartet auf den GarbageCollector


Es muss auch so gehen (denn so steht es in den API-docs):

Source code

1
2
3
public void setGeburtsDatum(int gebT, int gebM, int gebJ) {
this.geburtsDatum.set(gebJ,gebM,gebT);
}


Zur Differenz: Offenbar ist der erste Monat mit 0 belegt.
tar: Anlegen eines leeren Archivs wird feige verweigert.

Shadow

... mit bunten Sternchen und so

  • "Shadow" is male

Posts: 838

Date of registration: Dec 21st 2001

Location: Hamburg

9

Thursday, May 22nd 2003, 6:44pm

Natürlich müssen alle Instanzvariablen im Konstruktor initialisiert werden. Wenn das nicht geschieht gibts in den set-/getMethoden NullPointerExceptions...

Es ist aber auch legitim, in setGeburtsdatum jedes Mal einen neuen GregorianCalendar zu erzeugen. Man wird das Geburtsdatum ja nicht tausende Mal pro Sekunde ändern, nur damit der GarbageCollector nicht hinterherkommt.

Gruß
Shadow

P.S.
Da nächste Woche der Donnerstag wegfällt, empfiehlt es sich, die Aufgabe schon morgen zusammen mit Aufgabe 4 vorzuführen. Das Gedränge wird am 30. nochmal etwas größer sein, als an "normalen" Freitagen.

<hr>
edit
<b>Aus der ApiDoc:</b>
<pre>set
public final void set(int year,
int month,
int date)</pre>
Sets the values for the fields year, month, and date. Previous values of other fields are retained. If this is not desired, call clear first.

Parameters:
year - the value used to set the YEAR time field.
month - the value used to set the MONTH time field. Month value is 0-based. e.g., 0 for January.
date - the value used to set the DATE time field.
"Man hält die Erzeugung von Information für ein Zeichen von Intelligenz, während in Wirklichkeit das Gegenteil richtig ist: Die Reduktion, die Auswahl der Information ist die viel höhere Leistung."
-- Heinz Zemanek