Kann man mit einer Schleife mehrere Objekte gleichzeitig erzeugen in Java?
3 Antworten
Gleichzeitig nur mit Ansynchronität, also mehreren Threads (wobei das auch nicht zwingend "gleichzeitig" sein muss). Aber du kannst so viele Objekte erzeugen, wie du willst, auch in einer Schleife.
Naja, bis du dann den OutOfMemoryError kriegst. Aber das sollte wohl kaum passieren, außer du legst es darauf an.
Ich wollte die in der Schleife erzeugten Objekten so benennen wie die Wörter im Array. Also ein Objekt soll "Ballon" heißen, ein anderes "Kaffee" usw.
Ach so, jetzt verstehe ich dein array[i].
Sowas versuchte ich früher auch, weis aber nicht mehr wie das ging.
Auf jeden Fall kannst du nicht direkt array[i] nehmen, musst irgendeinen Umweg nemen mit String Name = array[i].
Aber Name ist dann immer noch eine Variable und kein Objektname.
Ok danke, du bist der einzige, der mich verstanden hat von 20 Antworten. Werde ich probieren.
Ich weis aber nur, dass das so nicht klappt -- kann mich aber dunkel erinnern, dass es in java eine (eingebaute) Funktion gibt, die aus dem Inhalt der Variablen Name (oder array[i]) einen Objektnamen erzeugt.
Also du musst etwas finden, was aus dem Inhalt von array[i] einen Bezeichner (so der offizielle Begriff) macht.
Du hast mich verstnaden, aber deine Lösung funitioniet nicht.
Habe ich versucht dir in meinem letzten Kommantar mitzuteilen -- der Inhalt einer Variablen ist noch kein Bezeichner -- suche mal in diversen Java-Foren nach z.B. "Inhalt Stringvariable zu Bezeichner konvertieren"
Zu Deinem Screenshot:
Erstmal muss der Einsprungpunkt deklariert werden als ...
public static void main (String[] args) {
...
}
... main, nicht man.
Der Konstruktor Deiner Vokabel-Klasse benötigt die Vokabeln in italienisch und englisch, also musst Du diese Daten natürlich auch irgendwo haben. Ich kann leider kein italienisch, also schreibe ich in das "italienische" Array hier einfach mal die deutschen Wörter.
int n = 5;
/*
* Die Arrayklammern kommen hinter den Datentyp,
* nicht hinter den Variablennamen!
*
* Die Variable italienisch ist vom Typ String[]
* (Array aus Strings).
*/
String[] italienisch = new String[n];
italienisch[0] = "Brot";
italienisch[1] = "Milch";
italienisch[2] = "Kaffee";
italienisch[3] = "Ente";
italienisch[4] = "Ballon";
String[] englisch = new String[n];
englisch[0] = "bread";
englisch[1] = "milk";
englisch[2] = "coffee";
englisch[3] = "duck";
englisch[4] = "balloon";
Vokabel[] vokabeln = new Vokabel[n];
/*
* Nun das neue Array mit den Vokabeln füllen.
*
* Anstatt mit "n" könnte man hier natürlich auch mit
* "vokabeln.length" vergleichen.
*/
for (int i = 0; i < n; i++) {
String it = italienisch[i];
String en = englisch[i];
vokabeln[i] = new Vokabel(it, en);
}
Wie kann ich es machen, dass die Vokabelobjekte mit den Begriffen im Array erzeugt werden. So wie ich das gemacht habe, zeigt er einen Fehler an
String array [] = new String [5];
array[0] = "Brot";
array[1] = "Milch";
array[2] = "Kaffee";
array[3] = "Ente";
array[4] = "Ballon";
for(int i = 0; i<array.length; i++)
{
Vokabel array[i] = new Vokabel ();
}
Zunächst heißt es ...
String[] array = new String[5];
Dann ist array vom Typ String[], jedes Element in array (z. B. array[0]) ist damit vom Typ String (also das selbe, nur ohne die Arrayklammern).
Einer Variablen vom Typ String kannst Du keine Variable vom Typ Vokabel zuweisen. Du müsstest dann das Array per ...
Vokabel[] array = new Vokabel[5];
... deklarieren und initialisieren. Dann kannst Du jedem Element einen Wert vom Typ Vokabel zuweisen.
Indem du die Objekte in der Schleife erzeugst.
Wo liegt das Problem?
Stimmt, ist eigentlich ganz einfach, hab nicht so weit gedacht. Danke
Object[] arr = new Object[5];
for (int i = 0; i < arr.length; i++)
arr[i] = new Object();
Ich gebe den Daumen, sobald ich den Beitrag gelesen habe.
Antwort schreiben dauert ein bisschen. ;-)
Ich wollte die Objekte selbst nicht in ein Array packen, das hätte ich in einem zweiten Schritt getan. Sondern sie zunächst nur erzeugen und mit den Wörtern, die sich im Array befinden, bennen. Also ein Objekt soll "Ballon" heißen, ein anderes "Kaffe" usw.
In den Objekteigenschaften würde ich dann jeweils eine italienische und eine englische Übersetzung eintragen, weil ich diese beiden Sprachen gleichzeitig lernen möchte.
Nunja, irgendwo musst Du sie speichern.
Wenn Du zunächst nicht weißt, wie viele Werte es werden, kannst Du z. B. auch eine verkettete Liste (in Deinem Fall also java.util.LinkedList<Vokabel>) verwenden.
Nachdem Du alle Objekte (per .add(...) oder .addLast(...))eingefügt hast, kannst Du Dir zunächst über die Methode .size() die Anzahl der Elemente (als int) holen. Dann allozierst Du ein entsprechend großes Array und nutzt die Methode .toArray(T[] a), um das ganze in ein Array zu überführen.
Beispiel:
java.util.LinkedList<Vokabel> vokabeln = new java.util.LinkedList<Vokabel>();
for (int i = 0; i < 5; i++) {
/* Hier die Liste befüllen. */
Vokabel vokabel = new Vokabel();
vokabeln.addLast(vokabel);
}
int numVokabeln = vokabeln.size();
Vokabel[] vokabelArray = new Vokabel[numVokabeln];
vokabeln.toArray(vokabelArray);
/* Ab hier kannst Du mit vokabelArray arbeiten. */
Was für einen Fehler zeigt "er" an?
AAber in deinem Codefragment sind mehrere Fehler.
(1) array ist schon als String-array definiert
(2) der Typ Vokabel ist nicht definiert
wenn Vokabel definiert wäre, müsste es heissen
Vokabel vokobject = new Vokabel();
den Namen vokobject müsstest du halt in der Schleife immer neu (eindeutig) erzeugen, damit du i unterscheidbare vokobjecte bekommst, z. B. vocobject + chr$(i) (nur Pseudocode, wie die echte Erzeugung aussieht liegt an der Java-Syntax)