Dynamisch Variablennamen generieren?

Status
Nicht offen für weitere Antworten.

ypsdg

Mitglied
Hallo zusammen,

gibt es eine Möglichkeit innerhalb einer Schleife z.B. neue Stringvariablen zu erzeugen?
also etwa:

for (int i = 0; i==10; i++) {
String name; <--- genau das geht aber nicht!
}

Am Ende sollten dabei also 10 Strings (name0, name1, ...) rauskommen.
Hat jemand eine Idee?
Vielen Dank!

ypsdg
 
nöp geht nicht !!
mach doch einen array wenn die anzahl von variablen schon bekannt ist:
Code:
String[] sa = new String[10];
for(int i = 0; i < sa.length; i++) {
  sa[i] = "irgendwas " + i;
}
oder eine Collection wenn größe noch nicht bekannt ist
Code:
Collection liste = new Vector();
for(int i = 0; i < sa.length; i++) {
  liste.add(i + "");
}
 
Wenn man die zwei Beispiele von deathbyaclown zusammenfasst, könnte man auch folgendes schreiben:
Code:
Vector strings = new Vector();
for (int i = 0; i==10; i++) {
	strings.addElement(String.valueOf(i)); // <-- Beispieldaten
}
String[] stringArray = (String[]) strings.toArray();
 
Grizzly hat gesagt.:
Wenn man die zwei Beispiele von deathbyaclown zusammenfasst, könnte man auch folgendes schreiben:
Code:
Vector strings = new Vector();
for (int i = 0; i==10; i++) {
	strings.addElement(String.valueOf(i)); // <-- Beispieldaten
}
String[] stringArray = (String[]) strings.toArray();
Damit wirst du aber nicht ganz glücklich:
Code:
Vector strings = new Vector();
for (int i = 0; i==10; i++) {
	strings.addElement(String.valueOf(i)); // <-- Beispieldaten
}
String[] stringArray = (String[]) strings.toArray(new String[strings.size());
du musst der Methode noch mitgeben was der Typ des arrays ist.... (sonst wird eine ClassCastException) geworfen

aber ich denke für ypsdg ist das overkill :wink:
 
deathbyaclown hat gesagt.:
}[/code]
oder eine Collection wenn größe noch nicht bekannt ist
Code:
Collection liste = new Vector();
for(int i = 0; i < sa.length; i++) {
  liste.add(i + "");
}

Gibt es ein Unterschied zwischen deinem Code und dem hier?
Code:
Vector v= new Vector();

Liebe Grüße
Reality
 
nein gibt es nicht...
genauso geht:
Code:
List vector = new Vector();
ich verwende hier die Interfaces die Vector implementiert. Man sollte wenn ein Interface zu der Struktur vorhanden ist immer das Interface nehmen einfach aus Flexibiltätsgrunden...

Das ganze ist eigentlich bei Methoden rückgaben zu verwenden:
man sollte - wenn man eine Collection zurückgeben will nicht schreiben:

Code:
public Vector getACollection() {
  return new Vector();
}
sondern
Code:
public Collection getACollection() {
  return new Vector();
}
hat den Vorteil - wenn du nun merkst - ach Vector passt nicht gut, HashSet, ArrayList oder was auch immer ist besser musst du nur schreiben
Code:
public Collection getACollection() {
  return new HashSet();
}
alle Klassen die diese Methode nützen müssen nicht geändert werden -> das macht deine API flexibel und leicht wartbar
 
deathbyaclown hat gesagt.:
nein gibt es nicht...
genauso geht:
Code:
List vector = new Vector();
ich verwende hier die Interfaces die Vector implementiert. Man sollte wenn ein Interface zu der Struktur vorhanden ist immer das Interface nehmen einfach aus Flexibiltätsgrunden...
Weil man dann beide Methoden/Klassen zur Verfügung hat?
Das ganze ist eigentlich bei Methoden rückgaben zu verwenden:
man sollte - wenn man eine Collection zurückgeben will nicht schreiben:

Code:
public Vector getACollection() {
  return new Vector();
}
sondern
Code:
public Collection getACollection() {
  return new Vector();
}
Die beiden Ausschnitte sehen mir identisch aus!

Liebe Grüße
Reality
 
Reality hat gesagt.:
Warum ist das nun so flexibel?
Wenn du eine Methode aufrufst die eine Collection zugibt musst du dich nicht darum kümmern was für eine Collection es ist. Stell dir vor die Methode wird sehr oft in der Anwendung verwendet. Du hast als Rückgabe Wert Vector angegeben. Nun stellst du fest: "mhm Vector sind dumm hier - ich will keine Duplicate drin haben, hey nehm ich HashSet und schon ist mein Problem gelöst" (als Beispiel). Nun darfst du dich ran machen deine gesamte Anwendung durchzusuchen wo du die Methode verwendet hast und wo du überall Vector geschrieben hast....
Hast du als Rückgabe wert Collection - so musst du das ganze nur in der eigentlichen Methode ändern. Dein Restprogramm bleibt konsistent.....
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben