Verhalten beim Initialisieren von Arrays

Status
Nicht offen für weitere Antworten.

Ham

Mitglied
Hallo,

ich habe gerade nach mehreren Stunden einen Fehler in meinem Programm behoben, den ich mir jedoch immernoch nicht so recht erklären kann. Meine Ausgangslage:

Ich schreibe eine Software zum Verwalten von Urlaubsdaten für Mitarbeiter. Die Klasse "Mitarbeiter" hat die Attribute Name, Abteilung sowie startDatum (Vector<Date>) und endDatum (Vector<Date>).

Um diese daten zu bündeln habe ich mir nun zwei Vector-Arrays geschaffen:
Java:
Vector<Date>[] startDates = new Vector[mitarbeiter.size()];
Vector<Date>[] endDates = new Vector[mitarbeiter.size()];

"mitarbeiter" ist hier auch ein Vector, der alle Objekte vom Typ Mitarbeiter enthält.

Nun wollte ich die startDates und endDates einlesen und habe dazu eine Schleife wie folgt benutzt:

Java:
for(int i = 0; i < mitarbeiter.size(); i++) {
  startDates[i] = new Vector<Date>();
  endDates[i] = new Vector<Date>();

  if(...) {
    startDates[i].addAll(mitarbeiter.get(i).getStartDates); 
    endDates[i].addAll(mitarbeiter.get(i).getEndDates);
  }
}
(der Code ist an sich noch etwas komplexer, ich habe 2 geschachtelte for-Schleifen statt nur einer usw.)

Ich dachte mir, das es ja so laufen müsste, aber ich bekam stets den merkwürdigen Fehler, dass startDates[0] außerhalb dieser Schleife nicht mehr abrufbar war. startDates[1] bis startDates[n] jedoch schon.

Ich hab also einige Stunden probiert und überlegt und hab vorhin irgendwann einmal einfach die Initialisierung der Vector-Arrays separat gemacht:

Java:
for(int i = 0; i < startDates.length; i++) {
	startDates[i] = new Vector<Date>();
	endDates[i] = new Vector<Date>();
}

// {...}

for(int i = 0; i < mitarbeiter.size(); i++) {
  if(...) {
    startDates[i].addAll(mitarbeiter.get(i).getStartDates); 
    endDates[i].addAll(mitarbeiter.get(i).getEndDates);
  }
}

Und mit dieser Variante hat es dann geklappt. Ich kann jedoch absolut nicht nachvollziehen, warum dies so der Fall ist. Und vor allen Dingen: Warum war nur startDates[0] bzw. endDates[0] nicht abrufbar, alle anderen Elemente des Arrays jedoch schon?

Kann mir da jemand auf die Sprünge helfen?
 
Zuletzt bearbeitet:
B

bygones

Gast
was heisst dass startDates[0] außerhalb dieser Schleife nicht mehr abrufbar war ?

mal abgesehen davon dass ein Array von Vectoren stark nach falschen design ruft...
 

Ham

Mitglied
Soll heißen, dass ich in einer anderen Schleife startDates[0] bis startDates[n] abgerufen habe und für startDates[0] einfach keinen Wert als Ausgabe erhalten habe.

Gibt es irgendeine pauschale Alternative zu Vector-Arrays? Ich bin mir schon der Tatsache bewusst, dass es eine eigenwillige Konstruktion ist. Jedoch muss ich hier direkt mit Werten aus Dateien arbeiten und kann nicht auf den Komfort von Datenbanken zurückgreifen, daher braucht es alleine einen gewissen Aufwand, um die Daten zu halten.
 
B

bygones

Gast
Soll heißen, dass ich in einer anderen Schleife startDates[0] bis startDates[n] abgerufen habe und für startDates[0] einfach keinen Wert als Ausgabe erhalten habe.
hat vll mitarbeiter.get(0) keine werte die er uebernimmt ?

Gibt es irgendeine pauschale Alternative zu Vector-Arrays?
im Grunde immer ein Objekorientiertes Design... Vector[] klingt danach als koennte man das eleganter und verstaendlicher mit Hilfe von Objekten loesen koennen.
 

Ham

Mitglied
hat vll mitarbeiter.get(0) keine werte die er uebernimmt ?
Doch, die Werte, die beim Zuweisen gelesen werden sind alle richtig. Ich habe mir die Werte ausgeben lassen, direkt nachdem sie zugewiesen worden sind und sie waren alle korrekt.
Als ich startDates[] später jedoch verarbeiten wollte, war startDates[0] jedoch schlichtweg leer.

Aber ich schätze, dass eine Lösung des Problems mit so wenig angegebenem Code nicht möglich wird, da der gesamte Sachverhalt doch um einiges komplexer ist und noch einige Fehlerquellen auftauchen könnten.

Ich habe gerade noch einmal darüber nachgedacht: An sich ist doch die Verwendung eines Vector-Arrays nicht gravierend anders, als ein zweidimensionales Array zu nutzen, oder?
 
B

bygones

Gast
Ich habe gerade noch einmal darüber nachgedacht: An sich ist doch die Verwendung eines Vector-Arrays nicht gravierend anders, als ein zweidimensionales Array zu nutzen, oder?
noe - beides meistens nicht empfehlenswert ;-) (immer und zwar immer lieber einen OO ansatz waehlen)
 

FatFire

Bekanntes Mitglied
Ich habe gerade noch einmal darüber nachgedacht: An sich ist doch die Verwendung eines Vector-Arrays nicht gravierend anders, als ein zweidimensionales Array zu nutzen, oder?
Ein zweidimensionales Array hat eine fixe Größe, ein Array von Vektoren eine variable, von daher doch gravierend anders. Und auch wenn es funktioniert, es bleibt der Vorwurf schlechten Designs. Wenn die Urlaubsdaten fix einem Mitarbeiter zugeordnet werden können, warum dann nicht die Mitarbeiterklasse um diese Daten erweitern, sondern getrennt von den Mitarbeitern aufbewahren? Anders macht es mehr Sinn.

Gruß FatFire
 

Ham

Mitglied
Naja, die Problemstellung ist folgende:

Aus einer CSV-Datei werden Urlaubsdaten ausgelesen (Abteilung, Name, Anfangsdatum, Enddatum). Diese werden geprüft, importiert und es werden entsprechende Objekte vom Typ Mitarbeiter erzeugt.

Nun sollen (in der Benutzeroberfläche) einer oder mehrere Mitarbeiter auswählbar sein und den Auswahlkriterien entsprechend die Urlaubsdaten aller Mitarbeiter in einem Kalender angezeigt werden.

Daher sammle ich an dieser Stelle alle entsprechenden Daten aus den Mitarbeiter-Objekten in einem Vector-Array.

Eine Objektorientierte Lösung wäre dann also beispielsweise eine Art abstrakten (hiermit meine ich nicht das abstract aus der Objektorientierung ;) ) Mitarbeiter zu erzeugen, der alle benötigten Mitarbeiterdaten als Attribute aufnimmt, oder wie?
Doch auch bei diesem Ansatz käme ich doch nicht um Vectoren herum.
 

Painii

Bekanntes Mitglied
Aus einer CSV-Datei werden Urlaubsdaten ausgelesen (Abteilung, Name, Anfangsdatum, Enddatum). Diese werden geprüft, importiert und es werden entsprechende Objekte vom Typ Mitarbeiter erzeugt.
Also hast du solche Mitarbeiter?
Java:
Date urlaubsStart;
Date urlaubsEnde;
/...
public Date getUrlaubsStart(){
 return urlaubsStart;
}
public Date getUrlaubsEnde(){
 return urlaubsEnde;
}
Nun sollen (in der Benutzeroberfläche) einer oder mehrere Mitarbeiter auswählbar sein und den Auswahlkriterien entsprechend die Urlaubsdaten aller Mitarbeiter in einem Kalender angezeigt werden.

Daher sammle ich an dieser Stelle alle entsprechenden Daten aus den Mitarbeiter-Objekten in einem Vector-Array.
Musst du die speichern?
Speicher doch die ausgewählten Mitarbeiter (in einem Vektor oder sonstwie), und rufe dann für jeden Mitarbeiter getUrlaubsStart/Ende auf.
 

FatFire

Bekanntes Mitglied
Eine Objektorientierte Lösung wäre dann also beispielsweise eine Art abstrakten (hiermit meine ich nicht das abstract aus der Objektorientierung ) Mitarbeiter zu erzeugen, der alle benötigten Mitarbeiterdaten als Attribute aufnimmt, oder wie?
Gaaaanz genau.
Doch auch bei diesem Ansatz käme ich doch nicht um Vectoren herum.
Nein, das nicht (es sei denn Du benutzt Listen statt Vektoren :lol:, hach bin ich witzig...), aber Du hättest dann halt die Daten beisammen, die zusammen gehören.
Beispiel: Du hast zehn Packungen Zigaretten und zehn Feuerzeuge. Würdest Du jetzt wenn Du rausgehst in eine Tasche alle Zigarettenpäckchen und in eine Tasche alle Feuerzeuge packen oder in eine Tasche eine Packung Zigaretten und ein Feuerzeug? Natürlich letzteres, weil es eine funktionale Einheit bildet. Objekte sollen nach Möglichkeit immer ein Abbild der Realität schaffen und da der Urlaub dem Mitarbeiter zugeordnet ist und nicht der Urlaub einer Person dem Urlaub anderer Personen, halte Dich auch beim Programmdesign an die Realität.

Gruß FatFire

PS: Sorry wegen dem doofen Beispiel, ich bin halt Raucher. Sehe mich jetzt aber genötigt: Kinder, lasst die Finger von den Kippen. Das macht nur krank und schadet euren Mitmenschen (weil die nicht immer Lust haben auf so doofe Beispiele, in die sich nur Raucher reinversetzen können).
 

Ham

Mitglied
Nein, nicht ganz. Die Mitarbeiter können ja mehrere Anfangs- und Enddaten haben. Daher sehen sie eher so aus:

Java:
Vector<Date> urlaubsStart;
Vector<Date> urlaubsEnde;
/...
public Vector<Date> getUrlaubsStart(){
 return urlaubsStart;
}

public Vector<Date> getUrlaubsEnde(){
 return urlaubsEnde;
}
.
 

Painii

Bekanntes Mitglied
Nein, nicht ganz. Die Mitarbeiter können ja mehrere Anfangs- und Enddaten haben.

Du kannst ja aber trotzdem direkt vom Mitarbeiter die Urlaubsdaten nehmen, und musst sie nicht noch extra speichern. Du kannst auch noch jedem Date den Mitarbeiter sofort ansehen, wenn du den z.b. dann dazuschreiben willst.

siehe auch den post von FatFire (den hab ich auch als nicht-raucher verstanden :D)
 
B

bygones

Gast
um FatFires witz nochmal aufzunehmen: du solltest doch eher ArrayList anstatt Vector nehmen - Vector is ja sowas von 90er Jahre ;-)
 

ARadauer

Top Contributor
ich hab mir das jetzt nicht alles durchgelesen, da mir die ersten paar Zeilen schon nicht gefallen.
Ein Objekt soll ein Objekt in der realen Welt darstellen..

Hat dein Mitarbeiter wirklich zwei Vectoren mit Urlaubs Anfangs und Enddatum mit der länge eines Arrays in dem vermultich Mitarbeiter drin sind? Ein Mitarbeiter soll auf jeden Fall mal kein Array mit Mitarbeitern haben (ausser ist Abteilungsleiter und das Array repräsentiert seine Untergebenen, dann vielleicht)

Wieso die Liste mit den Daten im Mitarbeiter, kann ein Mitarbeiter mehr Urlaube haben? (man bechte das Nomen Urlaub in der Frage ;-) ) Ich würd dann eher eine Liste mit Urlauben als eigenschaft des Mitarbeiters definieren und dieses Objekt Urlaub hat dann einen end und start datum....
 

Ham

Mitglied
Hmm... auch wenn sich der eigentliche Betreff meines Threads jetzt verloren hat (ist mir mittlerweile auch nicht mehr wirklich wichtig ;)) hat mir das hier schon gut weitergeholfen. Habe jetzt den Code umstrukturiert und mehr in Objekten gekapselt, statt alles in irgendwelchen Collections zu verarbeiten.
Der nächste, der sich den Code anschaut wird dann vielleicht nicht so einen großen Schock kriegen.

Danke an alle schonmal :)
 

Landei

Top Contributor
Noch ein Tipp: Urlaubsstart und -ende mit einzelnen Dates zu modellieren, ist auch nicht besonders geschickt. Entweder du schreibst die ein "Zeitspannen"-Klasse (nicht ganz einfach), oder schau dir mal Joda-Time an, da gibt es sowas.
 

Ham

Mitglied
Warum ist das nicht so geschickt? Das vereinfacht doch die Überprüfung später ungemein.

Aber danke für den Tipp mit Joda Time. Ich hab gerade mal reingeschaut und festgestellt, dass das so einiges leichter gemacht hätte. Für das nächste Projekt werde ich die lib sicherlich im Hinterkopf behalten, sofern ich mit Zeitverarbeitung zu tun habe.
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
K Komisches Verhalten beim erstellen einer Datei Java Basics - Anfänger-Themen 5
A Seltsames Verhalten beim ButtonClick (ActionListener() ) Java Basics - Anfänger-Themen 7
R Datentypen Das Verhalten von Strings als Datentypen Java Basics - Anfänger-Themen 7
MarvinsDepression Operatoren Verhalten von BitShiftOperatoren Java Basics - Anfänger-Themen 2
G Merkwürdiges Verhalten der Maven IDE Java Basics - Anfänger-Themen 3
D Unerwartetes Verhalten bei Client Server Chat App Java Basics - Anfänger-Themen 12
B Programm beendet sich nicht und weiteres seltsames Verhalten Java Basics - Anfänger-Themen 9
G unklares Verhalten nach Instanzierung neuer Klasse Java Basics - Anfänger-Themen 3
MiMa Seltsames Verhalten im Konstruktor Java Basics - Anfänger-Themen 6
M Komisches Verhalten der Variablen Java Basics - Anfänger-Themen 6
K Klassen Eclipse Verhalten bei Klassen Java Basics - Anfänger-Themen 16
M Verhalten von LocalDateTime#getNano() Java Basics - Anfänger-Themen 1
T Objekte mit Verhalten Java Basics - Anfänger-Themen 14
D Klassen Verhalten von Klassenvererbung bei Variablen Java Basics - Anfänger-Themen 1
D Seltsames Verhalten... Java Basics - Anfänger-Themen 5
O JFileChooser Verhalten -Pfad Java Basics - Anfänger-Themen 15
S Verhalten von JTextField in einem JTabbedPane (Register) Java Basics - Anfänger-Themen 6
G Input/Output Verhalten BuffferedReader bei unvollständigen Zeichen Java Basics - Anfänger-Themen 1
D Interface für Verhalten von "=="? Java Basics - Anfänger-Themen 21
B Thread komisches Verhalten auf Mac ... Java Basics - Anfänger-Themen 6
B Komisches Verhalten von ArrayList Java Basics - Anfänger-Themen 6
S JInternalFrame in JInternalFrame - Verhalten Java Basics - Anfänger-Themen 2
F Nicht nachvollziehbares Verhalten Java Basics - Anfänger-Themen 7
T unerklärliches Verhalten von Scanner Java Basics - Anfänger-Themen 2
D Komisches Verhalten einer For-Schleifen Java Basics - Anfänger-Themen 7
zilti Unlogisches Verhalten Java Basics - Anfänger-Themen 4
N public void und verhalten bei return Java Basics - Anfänger-Themen 2
P Komisches Verhalten von BufferedReader und readLine() Java Basics - Anfänger-Themen 2
Juelin jedit Fehler beim starten Java Basics - Anfänger-Themen 2
Kerstininer Vererbung Hilfe beim lernen von Objektorientierung für eine Klausur Java Basics - Anfänger-Themen 10
A Hilfe beim Lesen von Pfaden und Systemvariablen Java Basics - Anfänger-Themen 3
M Ausgabe beim Overloading Java Basics - Anfänger-Themen 3
W Null-Pointer Exception beim Programmstart Java Basics - Anfänger-Themen 8
H Nutzt Eclipse alle CPU-Threads beim Ausführen von Java-Programmen? Java Basics - Anfänger-Themen 4
M Nullpointer beim befüllen meiner Liste im Object Java Basics - Anfänger-Themen 3
J Beim Start des Programms zB. eine Linie in JPanel ausgeben Java Basics - Anfänger-Themen 4
I Projekte in IDE untereinander sharen / Probleme beim Build Java Basics - Anfänger-Themen 8
paulen1 Best Practice "Unchecked Assignment" Warnung beim erstellen eines 2D Arrays of Arraylists Java Basics - Anfänger-Themen 2
T Probleme beim Import eines Git-Repos Java Basics - Anfänger-Themen 2
C GLOOP Problem beim Erstellen der Kamera Java Basics - Anfänger-Themen 9
N Array beim erstellen mit Werten füllen Java Basics - Anfänger-Themen 6
T DamagedFontException beim drucken Java Basics - Anfänger-Themen 3
Z SNAKE Schlange beim Aufheben von Essen verlängern Java Basics - Anfänger-Themen 4
Bugs Bunny Fehlerhafte Berechnung beim erneuten Durchlaufen der Schleife Java Basics - Anfänger-Themen 5
stormyark Fehler beim überschreiben einer Variable Java Basics - Anfänger-Themen 1
T String Array Fehler beim Index Java Basics - Anfänger-Themen 3
Fiedelbambu Prüfen von Komma stelle beim Taschenrechner Java Basics - Anfänger-Themen 5
B Objekte verschwinden beim Übersetzen Java Basics - Anfänger-Themen 5
L Beim Java Programmstart, mehrere Parameter über die Kommandozeile übergeben Java Basics - Anfänger-Themen 9
sserio Problem beim Anzeigen Java Basics - Anfänger-Themen 5
X Hilfe beim Übertragen in eine For-Schleife Java Basics - Anfänger-Themen 1
S Fehler beim Programm Java Basics - Anfänger-Themen 2
G Main Methode wird beim ersten Aufruf nicht richtig ausgeführt Java Basics - Anfänger-Themen 1
M String beim einlesen formatieren Java Basics - Anfänger-Themen 12
N Exception beim Verwenden von Arraylist? Java Basics - Anfänger-Themen 10
I InputStream beim zweiten Mal fehlerhaft Java Basics - Anfänger-Themen 10
C Fehler beim erstellen eines Objektes Java Basics - Anfänger-Themen 3
C Brauche Hilfe beim Schreiben eines Programmes :/ Java Basics - Anfänger-Themen 1
cmn489 Werte beim Funktionsaufruf in ein Feld übertragen(falls dieses leer ist) Java Basics - Anfänger-Themen 1
I Output BigDecimal anstatt double / Problem beim Rechnen Java Basics - Anfänger-Themen 16
S Kriege Fehler "Exception in thread" beim Benutzen von SubStrings. Java Basics - Anfänger-Themen 2
D Hilfe beim Erzeugen eines Arrays NullPointerException wird ausgelöst Java Basics - Anfänger-Themen 11
Nerdinfekt BMI Rechner, fehler beim Zurückgeben des Strings? Java Basics - Anfänger-Themen 2
CptK Richtigen Pfad beim einlesen von Datei finden Java Basics - Anfänger-Themen 2
O Methode in while-Schleife aufrufen geht nur beim ersten Mal Java Basics - Anfänger-Themen 2
pry bitte Hilfe beim Kreditrechner objektorientiert Java Basics - Anfänger-Themen 6
J Hilfe beim Label animieren Java Basics - Anfänger-Themen 1
Avalon Programmierstil beim Mocken Java Basics - Anfänger-Themen 45
Avalon NullPointerException beim Mocken Java Basics - Anfänger-Themen 6
J Hilfe beim verstehen Java Basics - Anfänger-Themen 3
A Fehler beim Ausführen einer class Datei Java Basics - Anfänger-Themen 6
P Problem beim Überschreiben einer vererbten Methode Java Basics - Anfänger-Themen 4
M Compiler-Fehler Fehler beim Ausführen des Codes Java Basics - Anfänger-Themen 25
L Anfänger braucht Hilfe - Stecke beim Lernen fest Java Basics - Anfänger-Themen 10
N Probleme beim printen von Arrays durch for Schleife Java Basics - Anfänger-Themen 3
Bluedaishi Hilfe beim erklären dieser Methode Java Basics - Anfänger-Themen 5
E Macht Java Rechenfehler beim Potenzieren und Mod? Java Basics - Anfänger-Themen 5
J Hilfe beim Programmieren Java Basics - Anfänger-Themen 5
C Fehler beim Speichern (Build projekt) Java Basics - Anfänger-Themen 42
S Endlosschleife beim Ausgeben einer LinkedList Java Basics - Anfänger-Themen 2
tom.j85 TicTacToe - probleme beim Casten Java Basics - Anfänger-Themen 6
J Problem beim vergleich von zwei Integer Java Basics - Anfänger-Themen 3
Kirby.exe Fehler beim Ausgeben Java Basics - Anfänger-Themen 2
L Brauche Hilfe beim arbeiten mit Konstruktoren Java Basics - Anfänger-Themen 20
D Was tun gegen zu komplzierten Denken beim Programmieren Java Basics - Anfänger-Themen 27
G Problem beim Speichern von Objekten in einer Datei Java Basics - Anfänger-Themen 7
S Collections funktionale Listen (ListNode<E>) review und problem beim clone Java Basics - Anfänger-Themen 0
J NullPointerException beim Klonnen eines Arayys und beim aufrufen einer Methode Java Basics - Anfänger-Themen 2
J Fehler beim generieren von 4 Zufallszahlen Zahl doppelt ist eigentlich ausgeschlossen Java Basics - Anfänger-Themen 9
L Kleine Hilfe beim Schreiben eines Programmes benötigt :D Java Basics - Anfänger-Themen 40
T Fehlermeldung beim Versuch, einen String einzulesen Java Basics - Anfänger-Themen 4
V Wie wiederhole ich eine for-Schleife beim erreichen eines Wertes Java Basics - Anfänger-Themen 9
W Hilfe beim Chat Programm Java Basics - Anfänger-Themen 14
D Beim Programmieren auf die Logisch einfache Lösung kommen. Java Basics - Anfänger-Themen 17
S IndexOutOfBoundsException beim hinzufügen eines Elements zu einer Liste Java Basics - Anfänger-Themen 11
R String index out of range: -1 beim Datei Parsen Java Basics - Anfänger-Themen 15
I Methoden List.contains() beim 2. Element = true Java Basics - Anfänger-Themen 1
B EJB und Arquillian - bekomme Nullpointer Exception beim Aufruf der EJB Klasse Java Basics - Anfänger-Themen 40
O Verwirrt beim Java Collection Framework aufruf! Java Basics - Anfänger-Themen 9
S switch case fängt beim letzten case an Java Basics - Anfänger-Themen 6

Ähnliche Java Themen

Neue Themen


Oben