variabler variablenname

  • Themenstarter Themenstarter Guest
  • Beginndatum Beginndatum
Status
Nicht offen für weitere Antworten.
G

Guest

Gast
tach,

ich wüsste gerne, ob es mit java möglich ist variablen variablennamen zu benutzen.
für mein kleines programm soll nämlich eine variable anzahl von objekten erzeugt werden, und ich wüsste jetzt nicht wie ich das anders machen kann, als einen variablen variablenname, was mich ja nicht wirklich weiterbringt, da ich nicht weiß ob und wie das geht 😉

wäre also nett wenn mich jemand aufklären könnte, oder mir eine bessere lösung für mein problem sagen könnte.

achso vielleicht noch wichtig: lerne java erst seit zwei monaten in der uni, kann daher noch nicht zu viel 😉
 
Ein Beispiel für einen einfachen dynamischen Listentyp ist java.util.Vector<E>.

Beispiel:
Du willst eine unbestimmte Anzahl von String-Objekten abspeichern (es kann auch jedes andere Objekt oder einfach Object selbst sein).

Hier ein Paar Anwendungsbeispiele:
Code:
Vector<String> stringVector = new Vector<String>(); //Neuen Vector anlegen, der Strings speichert. Du kannst eine bestimmte Anfangsgröße des Vectors festlegen in dem du dem Konstruktor ein int >= 0 als Argument übergibst.
...
String firstString = "Mein erster String";
stringVector.add(firstString); //Fügt den String zum Vector hinzu. Ist nicht ausreichend Platz im Vector vorhanden, wird dieser automatisch vergrößert.
...
if (stringVector.contains(firstString)) //Überprüft, ob der String firstString im Vector enhalten ist
     System.out.println(stringVector.get(stringVector.indexOf(firstString))); //Findet zuerst den Index von firstString im Vector heraus und lässt sich das Objekt an dieser Position (logischerweise ist das firstString) dann übergeben um es auf der Konsole auszugeben.
...
String[] strings = vector.toArray(new String[vector.size()]); //Gibt alle Elemente des Vectors in einem Array mit der Größe der Anzahl aller in dem Vector enthaltenen Elemente zurück. Folgendes funktioniert nicht: (String[]) stringVector.toString(); !!!!! --> ClassCastException
for(String string : strings) //Durch den Array iterieren und alle String auf der Konsole ausgeben
     System.out.println(string);

Gruß,
Jan.
 
Ich würde anstelle eines Vector eine HashMap benutzen, da man hier Objekte anhand eines Namens abrufen kann.
Code:
HashMap<String, Object> variablenMap = new HashMap<String, Object>();
String variablenName = "irgendEinName";
Object object = new IrgendEinObject();
variablenMap.put( variablenName, object );
...
Object object2 = (IrgendEinObject)variablenMap.get(variablenName);
Anstelle des Typs Object kann auch ein anderer fester Typ angegeben werden, dann erspart man sich das casten bei der get-Methode. Ich verwende die HashMap ganz gern, wenn ich eine variable Anzahl von Werten habe, die ich in verschiedenen Programmteilen mit einem Namen abrufen möchte. Das ist in bestimmten Fällen eleganter zu verwenden, als durch eine Collection (ein Vector ist ja auch eine Art Collection) oder ArrayList zu iterieren und dort einen bestimmten Wert zu suchen.
 
Stimmt, die HashMap hatte ich ganz vergessen. Ist praktischer von der Handhabung, änhlich wie einer Array unter PHP vom Indexsystem her nur halt variable. 🙂
 
und anstelle dessen 😉 - sollte man ArrayList (ähnlich zu Vector) oder aber LinkedList verwenden 😉 .. zudem ist Vector überall synchronized und daher eher langsamer, wenn man für Threads synchronisierte Listen benötigt, gibt es bessere thread-safe Lösungen als Vector.
Also Streiche Vector, setze ArrayList oder LinkedList 😉
 
danke euch

werde mal versuchen den code den ihre da geschrieben habt zu entziffern und ihn dann ausprobieren.
 
sorry leute irgendwie sagt mir das irgendwie alles nichts. wäre also nett, wenn ihr mir irgendwie bei dem codeteil weiterhelfen könntet.

aus dem hier:

Code:
Objekt name1 = new Objekt();
Objekt name2 = new Objekt();
Objekt name3 = new Objekt();
...
Objekt nameN = new Objekt();

das zu machen.

wäre echt nett 🙂
 
Code:
List<Object> name= new ArrayList<Object>();
name.add(new Object());
name.add(new Object());
name.add(new Object());
...
name.add(new Object());

Zugreifen kannst du dann über
Code:
name.get(0);
name.get(1);
name.get(2);
...
name.get(n);
 
das hat mir leider irgendwie nicht weitergeholfen. als ich das versucht habe zu übernehmen konnte es nicht ausgeführt werden. vielleicht kann mir nochmal jemand helfen und sagen wo hier der fehler drin ist:

Code:
List<Point> name= new ArrayList<Point>();
name.add(new Point(1,5));
name.add(new Point(2,4));
name.add(new Point(3,0));
		
System.out.println (name.get(0).toString());

ps: wie erwähnt erst zwei monate mit java zu tun, also noch nicht so die leuchte 😉[/code]
 
Anonymous hat gesagt.:
das hat mir leider irgendwie nicht weitergeholfen. als ich das versucht habe zu übernehmen konnte es nicht ausgeführt werden. vielleicht kann mir nochmal jemand helfen und sagen wo hier der fehler drin ist:
Der Code sieht richtig aus, was ist das Problem?
 
Die Frage ist, was du mit der Ausgabe ausgeben willst?

Mit name.get(x) holst du dir ein Objekt aus der Liste.

Dieses Objekt ist vom Typ Point. Hat also alle Attribute und Methoden vom Point-Objekt. Z.B. Attribute wie x und y.
Willst du dir diese Attribute ausgeben lassen, dann geht das so

System.out.println(name.get(0).x);

Hoffe, ich konnte dir weiter helfen
 
So funktioniert's:

Code:
ArrayList<Point> name= new ArrayList<Point>(); 
name.add(new Point(1,5)); 
name.add(new Point(2,4)); 
name.add(new Point(3,0)); 
       
System.out.println (name.get(0).toString());
 
geht leider auch nicht 🙂

die fehlermeldung die ich beim kompilieren erhalte ist folgende:

test.java:4: cannot find symbol
symbol : class ArrayList
location: class test
ArrayList<Point> name= new ArrayList<Point>();
^
test.java:4: cannot find symbol
symbol : class ArrayList
location: class test
ArrayList<Point> name= new ArrayList<Point>();
 
Stimmt!

Ich hatte bei
Code:
List<Point> name = ...
zuerst einen Fehler angezeigt bekommen,
der ergab sich aber daraus, daß List ambiguous war (Swing/Util) 😳
 
danke mann.
jetzt geht es 🙂 ich hoffe ich bekomm damit jetzt alles hin was ich will.
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben