Objekt-Array dynamischer Länge aus Benutzereingaben erstellen

jonnyj

Mitglied
Ich habe eine Klasse

Java:
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!

Vielen Dank für eventuelle Hinweise!
 
Was kannst du denn schon? Du wirst ja nicht bei Null starten, sondern zumindest schon ein paar Grundlagen können.
 
Klar die absoluten Änfängerdinger kenn ich... Datentypen, Schleifen, Methoden, Klassen,Kontrollstruktoren, Arrays, Eingabe, Ausgabe...
 
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!

Vielen Dank für die Antworten soweit!
 
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!

Vielen Dank für die Antworten soweit!
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.
 
Zuletzt bearbeitet:

Zurück
Oben