Array Objekte einer Klasse zuordnen

James15225

Mitglied
Ich will ein Mensa Verwaltungsprogramm schreiben. Ich will sehen wann ein Schüler in der Mensa essen war. Ich wollte wissen ob man folgende Methode so schreiben kann. Es gibt zwei Klassen. Einmal die Klasse "Schüler" und einmal die Klasse"Mensaschein",die über einen Array assoziert ist.

public void NeuerMensaEintrag(String datum){
int q=1;
mensaschein[q]=new Mensaschein(datum);
q=q+1;
}
Ich weiss nicht, ob die Methode so funktioniert wie ich es mir vorstelle. Also ich will das bei jedem Aufruf der Array um eins erhöht wird und das an der Stelle q dann ein Objekt von der Klasse Mensaschein gespeichert wird mit dem datum, dass man beim Aufruf der Methode übergeben hat. Kann man das so zuweisen?
 

MoxxiManagarm

Top Contributor
Syntaktisch scheint es mir korrekt. Aber du initialisierst q immer beim Methodenaufruf mit 1. q wird also an der Stelle immer 1 sein und am Ende der Methode 2.
 

Manuel.R

Bekanntes Mitglied
nee....
immer wenn ein neuer MensaScheinEintrag kommt ist q=1 und das q=q+1 kanst du dir sparen....

wird die Methode aufgerufen ist q=1....

Guck dir mal an was Heap und Stack im Speichermodell von Java bedeuten.
 

Manuel.R

Bekanntes Mitglied
dynamisch einen Array erweitern heißt:
1.) nimm den alten Array --> hole dir die länge
2.) addiere die alte Länge plus 1
3.) erstelle einen neuen Array mit der neuen Länge
4.) kopiere die Daten aus dem alten Array in den neuen Array
5.) und setze die Referenzen korrekt, dass die Assoziationen erhalten bleiben

die Lösung ist die Verwendung einer ArrayList anstatt eines Arrays. Die Liste wächst automatisch (dynamisch) mit.
 

Manuel.R

Bekanntes Mitglied
wenn man objekt-orientiert entwickeln möchte.... und das ist der Anspruch an die Mensa-Verwaltung (Schüler und Schein) kann man sich auch damit beschäftigen, warum das q immer wieder 1 ist wenn ein neues Objekt hinzugefügt wird.

Dazu gehört vielleicht auch das Verständnis zu Call by Value und -Reference....

Einfach nur immer los-coden ist auch nicht immer richtig.....
 

Flown

Administrator
Mitarbeiter
wenn man objekt-orientiert entwickeln möchte.... und das ist der Anspruch an die Mensa-Verwaltung (Schüler und Schein) kann man sich auch damit beschäftigen, warum das q immer wieder 1 ist wenn ein neues Objekt hinzugefügt wird.

Dazu gehört vielleicht auch das Verständnis zu Call by Value und -Reference....

Einfach nur immer los-coden ist auch nicht immer richtig.....
Das hat einfach was mit Scoping zu tun
 

mrBrown

Super-Moderator
Mitarbeiter
wenn man objekt-orientiert entwickeln möchte.... und das ist der Anspruch an die Mensa-Verwaltung (Schüler und Schein) kann man sich auch damit beschäftigen, warum das q immer wieder 1 ist wenn ein neues Objekt hinzugefügt wird.

Vielleicht solltest du dich mal mit damit auseinandersetzen, die '1' ist nicht mal ein Objekt :p

Und relevant, ob Heap oder Stack, ist hier nicht. Das ist nur Scope und Deklaration.

Dazu gehört vielleicht auch das Verständnis zu Call by Value und -Reference....
Ehrlich gesagt fällt mir grad kein Beispiel ein, bei dem ich da in der letzten Zeit drüber nachgedacht hätte oder es eine Rolle gespielt hätte...
"Call by Value" wird halt auch für Objekte benutzt, auch wenn da eine Referenz auf das Objekt übergeben wird :p
Der Unterschied Mutable/Immutable ist da relevanter...
 

Manuel.R

Bekanntes Mitglied
Das hat einfach was mit Scoping zu tun
..... und der Scope hat nichts mit dem Stack oder Heap zu tun? ... das q kein Objekt ist, ist mir auch klar....

und call by ..... ist in soweit relevant, dass im Verlauf der Anwendung Objekte angepasst werden sollen... gerade bei der Funktion "neuerMensaSchein(...)" Neben dem Datum für den neuen Schein müsstest du der Methode auch den passenden Schüler mit übergeben, der den Schein erhalten soll. Der Schüler selbst kapselt eine Datenstruktur (Liste) von Mensascheinen, die nur ihm gehören.

Im Verlauf der Ausführung befindet sich die Methode und die lokalen Parameter im Stack. Wird die Ausführung beendet, verlassen die Daten den Stack (sie sind einfach weg)... "ja sie verlassen dann auch den sichtbarkeitsbereich (Scope)"
Was bleibt von der Erkenntnis ist, dass alles was du in der Methode gemacht hast, weg ist, ausser du übergibst der Methoden Objektreferenzen, die die Änderungen auf eine bestimmte Dauer speichern.
 

Manuel.R

Bekanntes Mitglied
Ein Möglichkeit wäre auch zu sagen, das Schüler-Objekt selbst besitzt die Funktion einen Mensaschein zu seiner Liste hinzuzufügen.

Code:
class Schueler{

private String id;
private String vorname;
private String nachname;

private List<MensaSchein> mensascheine;

//constructor

//getter + setter

//Methode für das Hinzufügen und Entfernen eines Mensascheins

//überschreiben von equals und hashcode 

}
 

mrBrown

Super-Moderator
Mitarbeiter
..... und der Scope hat nichts mit dem Stack oder Heap zu tun?
Nicht so, dass es irgendwie relevant für einen Einsteiger ist (oder auch für einen Fortgeschrittenen)

und call by ..... ist in soweit relevant, dass im Verlauf der Anwendung Objekte angepasst werden sollen... gerade bei der Funktion "neuerMensaSchein(...)" Neben dem Datum für den neuen Schein müsstest du der Methode auch den passenden Schüler mit übergeben, der den Schein erhalten soll. Der Schüler selbst kapselt eine Datenstruktur (Liste) von Mensascheinen, die nur ihm gehören.
Alles in Java ist call-by-value.
Hat aber auch mit deinem Beispiel nicht wirklich was zu tun.

Im Verlauf der Ausführung befindet sich die Methode und die lokalen Parameter im Stack. Wird die Ausführung beendet, verlassen die Daten den Stack (sie sind einfach weg)... "ja sie verlassen dann auch den sichtbarkeitsbereich (Scope)"
Was bleibt von der Erkenntnis ist, dass alles was du in der Methode gemacht hast, weg ist, ausser du übergibst der Methoden Objektreferenzen, die die Änderungen auf eine bestimmte Dauer speichern.

Ob sie den Stack verlassen oder nicht ist völlig irrelevant für diesen Anwendungsfall und auch ziemlich missverständlich. Objekte liegen erstmal im Heap, und nicht auf dem Stack - auch als Parameter oder lokale Variable.

Relevant ist da nur, ob das Objekt/der primitive Wert noch irgendwie erreichbar ist. Und das hängt maßgeblich vom Scope ab, und nicht davon, ob es auf'm Stack oder Heap liegt.

(Die "Java-Bible" Effective Java erwähnt Stack und Heap in dem Kontext immerhin Null mal, scheint also echt wesentlich zu sein :p)
 

Manuel.R

Bekanntes Mitglied
Nicht so, dass es irgendwie relevant für einen Einsteiger ist (oder auch für einen Fortgeschrittenen)
Alles in Java ist call-by-value.
Das ist und wird immer ein Streit-Thema bleiben was Java hier macht.....

Ob sie den Stack verlassen oder nicht ist völlig irrelevant für diesen Anwendungsfall und auch ziemlich missverständlich. Objekte liegen erstmal im Heap, und nicht auf dem Stack - auch als Parameter oder lokale Variable.

sind jedoch nie erreichbar.... --> Man könnte aus Spaß untersuchen, ob ein wiederholtes Ausführen der Methode zu einem Speicherproblem führt (Memory Leak). immer wieder einen Mensaschein erzeugen. Die Referenzen sind an das ausführende Objekt gebunden und es besteht kein Zugriff.

Relevant ist da nur, ob das Objekt/der primitive Wert noch irgendwie erreichbar ist. Und das hängt maßgeblich vom Scope ab, und nicht davon, ob es auf'm Stack oder Heap liegt.
Jeder Thread eines Programmes erhält für den Stack einen eigenen Speicherbereich mit fixer Größe zugewiesen. Darauf werden Informationen zum Programmablauf (z.B. Funktionsparameter) und lokale Variablen gespeichert. Beim Anlegen neuer lokaler Variablen wächst der Stack an und beim Verlassen des Sichtbarkeitsbereichs ("Scope") schrumpft er wieder und der Speicher wird automatisch aufgeräumt.

Der Scope ist durch die Methode definiert. Beim Verlassen der Methode besteht kein Zugriff mehr auf die lokalen Variablen der Methoden. Ein erneutes Aufrufen führt zur erneuten Erstellung der jeweiligen Variablen und Objekte.

Scheißegal wie, der Mensaschein aus der Methode ist weg und der Schüler muss hungern und alles nur weil nicht jeder den Schein sieht als lokale Variable.......
 

mrBrown

Super-Moderator
Mitarbeiter
Das ist und wird immer ein Streit-Thema bleiben was Java hier macht.....
Was Java macht ist eigentlich ziemlich klar.
Streitfrage ist nur, was call-by-reference meint, und den meisten Definitionen nach, wird es in Java nicht benutzt.


sind jedoch nie erreichbar.... --> Man könnte aus Spaß untersuchen, ob ein wiederholtes Ausführen der Methode zu einem Speicherproblem führt (Memory Leak). immer wieder einen Mensaschein erzeugen. Die Referenzen sind an das ausführende Objekt gebunden und es besteht kein Zugriff.
Der erste und letzte Satz ist etwas unverständlich.

Zum Mittelteil: probiers aus und du wirst kein eindeutiges Ergebnis bekommen. Ist, wie schon gesagt wurde, Implementierungsdetail.


Jeder Thread eines Programmes erhält für den Stack einen eigenen Speicherbereich mit fixer Größe zugewiesen. Darauf werden Informationen zum Programmablauf (z.B. Funktionsparameter) und lokale Variablen gespeichert. Beim Anlegen neuer lokaler Variablen wächst der Stack an und beim Verlassen des Sichtbarkeitsbereichs ("Scope") schrumpft er wieder und der Speicher wird automatisch aufgeräumt.
Das hast du sehr schön erklärt. Ist aber, wie schon gesagt wurde, zum Teil auch Implementierungsdetail und für den Programmierer normalerweise nur relevant, wenn's nen Stackoverflow gibt.

Der Scope ist durch die Methode definiert. Beim Verlassen der Methode besteht kein Zugriff mehr auf die lokalen Variablen der Methoden. Ein erneutes Aufrufen führt zur erneuten Erstellung der jeweiligen Variablen und Objekte.
Scope ist nicht nur durch Methoden definiert, sondern auch jedes if, jede Schleife und jeder Block haben einen einem eigenen Scope.

Scheißegal wie, der Mensaschein aus der Methode ist weg und der Schüler muss hungern und alles nur weil nicht jeder den Schein sieht als lokale Variable.......
Und das, obwohl der Mensaschein auf dem Heap liegt :(
 

James15225

Mitglied
Ok ich bin euch sehr dankbar für eure Antworten, muss aber sagen, dass ich nicht alles verstanden habe. Also ich habe verstanden, dass q beim Methodenaufruf immer wieder auf 1 initialisiert wird und deshalb nicht über 2 geht. Kann mir dann vielleicht jemand ein konkretes Beispiel geben, wie man ein Array dynamisch um eins steigert.
 

Javinner

Top Contributor
Ok ich bin euch sehr dankbar für eure Antworten, muss aber sagen, dass ich nicht alles verstanden habe. Also ich habe verstanden, dass q beim Methodenaufruf immer wieder auf 1 initialisiert wird und deshalb nicht über 2 geht. Kann mir dann vielleicht jemand ein konkretes Beispiel geben, wie man ein Array dynamisch um eins steigert.
#4 @Manuel.R hat es dir bereits in Schritten aufgeführt, was in diesem Fall zu tun wäre.
In seinem Post #10 hat er eine Klasse gepostet, die würde ich ausbauen ;)
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
J Problem mit einer Methode, die beliebig viele Objekte in Array speichern soll Java Basics - Anfänger-Themen 6
F Adressverwaltungsprogramm: Objekte einer Klasse in Array Java Basics - Anfänger-Themen 6
W Objekte in einer Array sortieren Java Basics - Anfänger-Themen 3
P Array-Objekte-Aufruf Java Basics - Anfänger-Themen 22
M Objekte in Array speichern und ausgeben Java Basics - Anfänger-Themen 17
R Objekte aus Array als String + kommasepariert speichern Java Basics - Anfänger-Themen 12
PaperHat Objekte in Array vergleichen Java Basics - Anfänger-Themen 9
Orkanson Objekte in ein Array einfügen Java Basics - Anfänger-Themen 5
K Comparable - Objekte aus Array vergleichen und größtes auswählen Java Basics - Anfänger-Themen 1
S Klassen Objekt- Tabelle / Dynamisches 2Dimensionales Array für Objekte Java Basics - Anfänger-Themen 6
F Objekte in einem Array speichern Java Basics - Anfänger-Themen 1
N Objekte in Array rein Java Basics - Anfänger-Themen 6
B Verschiedene Objekte in 2 dimensionalem Array speichern Java Basics - Anfänger-Themen 10
R Bilder aus Array als anklickbare Objekte Java Basics - Anfänger-Themen 3
J Array Objekte erstellen Java Basics - Anfänger-Themen 6
U Objekte in Array erstellen und Methode in verschiedenen klassen aufrufen Java Basics - Anfänger-Themen 5
T Objekte in Array verwalten Java Basics - Anfänger-Themen 4
I Objekte in einem Array sortieren Java Basics - Anfänger-Themen 19
B Ausgabe von Array aus Objekte Java Basics - Anfänger-Themen 2
T OOP Objekte erzeugen und in einem Array ausgeben. Java Basics - Anfänger-Themen 2
M Zugriff auf Objekte aus doppelten Array Java Basics - Anfänger-Themen 16
P Objekte im Array speichern und auf den Inhalt zugreifen ? Java Basics - Anfänger-Themen 4
I Erstellte Objekte in Array's miteinander vergleichen Java Basics - Anfänger-Themen 11
R Objekte in Array ablegen - Vererbung Java Basics - Anfänger-Themen 5
L Mit Array neue Objekte erzeugen Java Basics - Anfänger-Themen 3
S Point-Objekte in Array einfügen Java Basics - Anfänger-Themen 13
H Objekte in ein array ablegen Java Basics - Anfänger-Themen 7
B Array-objekte,. Es wird ein Fehler ausgegeben Java Basics - Anfänger-Themen 11
J Mehrere Objekte in einem Array Java Basics - Anfänger-Themen 5
walker23m 2 objekte in das array [i] t Java Basics - Anfänger-Themen 2
L Objekte im Array speichern Java Basics - Anfänger-Themen 3
G Array Objekte Klasse Java Basics - Anfänger-Themen 9
T Array verkleinern Java Basics - Anfänger-Themen 2
J Array aus Numberfield Eingaben Java Basics - Anfänger-Themen 7
D Array List mit Objekten sortieren Java Basics - Anfänger-Themen 2
onlyxlia Anzahl Random Zahlen mit Scanner abfragen und in Array speichern Java Basics - Anfänger-Themen 10
Ü Java Array - Buchstaben als Zahlen ausgeben Java Basics - Anfänger-Themen 22
Ü Zweidimensionales Array in der ersten Zeile deklarieren Java Basics - Anfänger-Themen 13
Thomas Uppe 2D Array Reihenfolge vermischen Java Basics - Anfänger-Themen 4
T array auslesen Java Basics - Anfänger-Themen 2
Nitrogames Variablen Variable aus JOptionPane Abfrage in Array einfügen Java Basics - Anfänger-Themen 4
moini Auf Array aus Superklasse zugreifen? Java Basics - Anfänger-Themen 2
J ArrayList in 2D-Array konvertieren. Java Basics - Anfänger-Themen 48
M NullPointerException: Cannot read the array length because "this.Kinder" is null Java Basics - Anfänger-Themen 1
P Wieso kann ich als Index für einen Array einen Char angeben? Java Basics - Anfänger-Themen 3
Finn_lol Fehlermeldung bei Schleife mit Array Java Basics - Anfänger-Themen 4
Proxy Chars vor array übergabe toLowerUpcase Java Basics - Anfänger-Themen 14
iAmFaiinez Primzahlen Tester ohne Array Java Basics - Anfänger-Themen 4
S array 2 dimensional treppe Java Basics - Anfänger-Themen 3
S Array 2x2 Blöcke mit 0 und 1 Java Basics - Anfänger-Themen 10
C Array von Klassen Java Basics - Anfänger-Themen 2
julian0507 2Dim-Array Spaltensummen Java Basics - Anfänger-Themen 1
XWing Doppelte Zahlen im Array Java Basics - Anfänger-Themen 8
melisax Java 2D-Array Tabelle Java Basics - Anfänger-Themen 4
melisax Java Array Wert an bestimmtem Index angeben Java Basics - Anfänger-Themen 14
W Items löschen aus String Array vom Custom Base Adapter Java Basics - Anfänger-Themen 2
Proxy Stack erweitern mit neuem Array falls der alte voll ist!? Java Basics - Anfänger-Themen 5
E Array, nächste Zahl zur 5 ausgeben, wie? Java Basics - Anfänger-Themen 42
J Array.list vergleichen Java Basics - Anfänger-Themen 1
W Java-Code mit Array Java Basics - Anfänger-Themen 14
D Reflections & Generisches Array Java Basics - Anfänger-Themen 4
T Array Java Basics - Anfänger-Themen 2
T Array Java Basics - Anfänger-Themen 15
T Wörteranzahl im Array zählen Java Basics - Anfänger-Themen 9
Ostkreuz Zweidimensionaler Array Index Java Basics - Anfänger-Themen 2
S String Array Buchstaben um einen gewissen Wert verschieben Java Basics - Anfänger-Themen 4
R Images aus einem Array ausgeben Java Basics - Anfänger-Themen 3
R 2d Array individuell machen Java Basics - Anfänger-Themen 4
D 2D Char Array into String Java Basics - Anfänger-Themen 2
J Array Median bestimmen Java Basics - Anfänger-Themen 6
S Array Maximum bestimmen mit for und foreach Java Basics - Anfänger-Themen 7
S Prüfen ob ein zweidimensionales Array rechteckig ist Java Basics - Anfänger-Themen 4
N Array Java Basics - Anfänger-Themen 1
J Array Mittleren Wert bestimmen Java Basics - Anfänger-Themen 2
D OOP Array einem Objekt zuweisen Java Basics - Anfänger-Themen 2
O Zahlen aus einem char-array per char + Zeichen addieren Java Basics - Anfänger-Themen 2
S leeres Array statt Null Pointer Exception ausgeben Java Basics - Anfänger-Themen 20
S Inhalte aus Array vergleichen und Max ausgeben Java Basics - Anfänger-Themen 3
M 2d array ohne längen anlegen Java Basics - Anfänger-Themen 4
S Bestimmte werte aus einem Array löschen Java Basics - Anfänger-Themen 2
S Ausgeben wie oft ein Wert in einem Array vorkommt Java Basics - Anfänger-Themen 7
E Reihenfolge der Werte umdrehen (mittels statischem int-Array Java Basics - Anfänger-Themen 3
O 2 Dimensionales Array Java Basics - Anfänger-Themen 6
M Bubble Sort - Int[] Array sortieren Java Basics - Anfänger-Themen 2
javaBoon86 Array mehrere Dimensionen Java Basics - Anfänger-Themen 10
B Array nach Elementwerten sortieren? Java Basics - Anfänger-Themen 1
B Explizit Array definieren geht nicht? Java Basics - Anfänger-Themen 14
D Kleinste Zahl in Array finden die vorher noch errechnet werden müssen. Java Basics - Anfänger-Themen 4
L Gegebenes Array sortieren, indem zufällige Zahlenpaare aus Array ausgewählt werden Java Basics - Anfänger-Themen 14
Say 2-DIM Array Code lesen und verstehen Java Basics - Anfänger-Themen 5
N Array beim erstellen mit Werten füllen Java Basics - Anfänger-Themen 6
C Java Array Struktur, welche ist wann besser? Java Basics - Anfänger-Themen 12
Temsky34 Array IndexOf nicht verfügbar Java Basics - Anfänger-Themen 18
belana wie am besten 2D Array von String to Integer Java Basics - Anfänger-Themen 18
S Array mit Methode löschen Java Basics - Anfänger-Themen 2
J Java To String Methode, Array mit For-Schleife Java Basics - Anfänger-Themen 2
E Durch Muster in Array iterieren Java Basics - Anfänger-Themen 3
L Frage zum Array Java Basics - Anfänger-Themen 1
C 2D Array Ausgabe mit for-Schleife i,j Java Basics - Anfänger-Themen 4
D Methode: Array Reihenfolge tauschen Java Basics - Anfänger-Themen 3

Ähnliche Java Themen

Neue Themen


Oben