Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
Objekt-Array dynamischer Länge aus Benutzereingaben erstellen
public class Student {
string firstname;
string lastname;
string username;
}
ich möchte nun einen Array mit Objekten dieser Klasse erzeugen, die Namen der Objekte sollen jeweils der username sein. Die Objektnamen sollen jeweils vom Nutzer eingegeben werden.
Die Anzahl der zu erstellenden Objekte soll variabel sein.
Sprich ich möchte einen Array mit Objekten erstellen, die Objekte sollen von der Klasse Student sein, die Objektnamen sollen über die command prompt eingegeben werden. Ich möchte die Eingabe der Objekte erste beenden, wenn ein bestimmter Befehl eingegeben wird.
Wie könnte ich das realisieren?
Ich hab grad 10h im Internet nach Lösungen gesucht, aber leider nicht gefunden, bin absoluter noob!
Dann kennst du ja alles, was für die Aufgabe nötig ist
Könntest du denn einen einzelnen Studenten über die Kommandozeile einlesen?
Wobei ich etwas überr "Objektname" stolper – was meinst du damit? Objekte haben keinen Namen, sie haben nur Attribute, welche einen Namen darstellen können.
Dann kennst du ja alles, was für die Aufgabe nötig ist
Könntest du denn einen einzelnen Studenten über die Kommandozeile einlesen?
Wobei ich etwas überr "Objektname" stolper – was meinst du damit? Objekte haben keinen Namen, sie haben nur Attribute, welche einen Namen darstellen können.
Mein Problem ist, dass ich die Namen der Objektinstanzen nicht dynamisch von der Usereingabe hinbekomme.
Ich muss ja eine neue Instanz erstellen:
Student MaxMustermann= new Student();
Nun soll aber "MaxMustermann" nicht statisch im Code festgelegt sein, sondern eben vom User eingegeben werden und hier hapert es in meinem Verständnis!
Ich nehme mal an, dass du glaubst, Variablen mit dem vom Benutzer eingegebenen Namen anlegen zu müssen, weil du später auf das Objekt wieder mit seinem vom Benutzer eingegebenen Namen zugreifen möchtest?
In solch einem Fall sind assoziative Arrays bzw. Dictionaries bzw. Maps (in Java z.B. als java.util.Map) nützlich.
Du deklarierst also nicht zehntausend individuelle Variablen, sondern nutzt eine Datenstruktur (Map), die es dir erlaubt, einen Namen auf jeweils ein Objekt abzubilden.
Mein Problem ist, dass ich die Namen der Objektinstanzen nicht dynamisch von der Usereingabe hinbekomme.
Ich muss ja eine neue Instanz erstellen:
Student MaxMustermann= new Student();
Nun soll aber "MaxMustermann" nicht statisch im Code festgelegt sein, sondern eben vom User eingegeben werden und hier hapert es in meinem Verständnis!
Das ist tatsächlich ein Problem, mit dem viele Einsteiger Schwierigkeiten haben. Das weiß ich aus eigener Erfahrung
Es muss nicht für jede Instanz eine Variable mit einem passenden Namen existieren, z. B.
Java:
class Foo {
int zahl;
}
Foo[] foos = new Foo[5]; // ein array mit Platz für 5 Instanzen von Foo
for(int i = 0; i < foos.length; i++) {
Foo foo = new Foo(); // deklariert die Variable "foo" und erzeugt eine neue Instanz von Foo
foo.zahl = i; // der Instanzvariablen einen Wert zuweisen
foos[i] = foo; // die Referenz auf das erzeugte Foo dem Array zuweisen
}
// jetzt hast du ein Array mit 5 Instanzen von Foo
Beachte, dass die Variable "foo" immer wieder verwendet wird. Es wird eine neue Instanz erzeugt und die Referenz darauf in der Variablen gespeichert. Anschließend wird diese Referenz im Array gespeichert und beim nächsten Durchlauf eine neue Variable mit dem selben Namen und einer neuen Instanz erzeugt.
Mit einem entsprechenden Konstruktor von Foo, würdest du gar keine benannte Variable mehr benötigen:
Java:
class Foo {
int zahl;
Foo(int parameter) { // Konstuktor, der die Zahl als Parameter übernimmt und der Instanzvariablen zuweist
zahl = parameter;
}
}
Foo[] foos = new Foo[5]; // ein array mit Platz für 5 Instanzen von Foo
for(int i = 0; i < foos.length; i++) {
foos[i] = new Foo(i); // neue Instanz von Foo erstellen und direkt zuweisen
}
// jetzt hast du ein Array mit 5 Instanzen von Fo
Noch ergänzend:
Java:
Foo foo = new Foo(); // Deklariert die Variable "foo" und erzeugt eine neue Instanz von Foo
foo.zahl = 1;
foos[0] = foo;
foo = new Foo(); // erzeugt eine neue Instanz und überschreibt die vorherige
foo.zahl = 42;
foos[1] = foo;
System.out.println(foos[0].zahl); // 1
System.out.println(foos[1].zahl); // 42
Hier wird die Instanz in der Variablen "foo" zwar überschrieben, aber sie wurde ja vorher dem Array zugewiesen. Damit ist sie weiterhin verfügbar.