# Variabler/dynamischer Objektname?



## mrfreeman12 (23. Jan 2004)

Hallo! Also, muss gleich sagen: Hilfe benutzt -> nix zu dem Thema gefunden!
Ich habe folgendes Problem: ich habe eine Klasse AUTO. Nun kann der User (s)ein Auto in die Datenbank einfügen. Dafür muss doch ein Objekt der Klasse AUTO erstellt werden. Das passiert mit: AUTO auto1 = new AUTO(); Nun die Frage: wie kann ich den Objektnamen dynamisch erstellen. Wenn also ein neues Auto (neues Objekt) zugefügt wird, soll es dann auto2 heißen. Geht das überhaupt (dynamische Objketnamen)? Hab schon versucht den Objektnamen mit einer Variablen zu ersetzen, dann regt sich der Compiler über 2 gleichnamige Variablen oder so. Bitte hilft mir!
Danke für die Hilfe!
MfG
mrfreeman12


----------



## el_barto (23. Jan 2004)

mrfreeman12 hat gesagt.:
			
		

> Hab schon versucht den Objektnamen mit einer Variablen zu ersetzen, dann regt sich der Compiler über 2 gleichnamige Variablen oder so.


??? auto1 *ist* der variablenname. variablennamen können nicht dynamisch erstellt werden. wüsste jedenfalls nicht wie.


----------



## mrfreeman12 (23. Jan 2004)

Hi! Ich meinte damit das ich eine Variable habe z.B. String name="auto"+i; Und dann, wenn ich ein neues Objekt erstelle, den Objektname als name (also Variable) einsetze. name wird sich jedesmal ändern, wenn man der User ein neues Auto einfügen soll (i++). Doch wie gesagt das Ganze funzelt nicht.


----------



## el_barto (23. Jan 2004)

mir ist immer noch nicht ganz klar, was du vorhast. name ist die variable. dieser weist du den wert "auto" + i zu. bei i == 1 also "auto1". wenn du dann i um 1 erhöhst, weist du der variablen als nächstes "auto2" zu. danach "auto3" usw.


----------



## bygones (23. Jan 2004)

dynamische Bezeichnung geht in Java nicht....

Dafür musst du arrays oder Collections nehmen !!


----------



## marsias (23. Jan 2004)

Hi!

Habe verstanden was du willst.
Aber ist das so wichtig? Erstelle in deinem Objekt Auto eine
Variable name, und getter/setter dazu. dann kannst du darauf
zugreifen z.B. auto1.getName() .

Oder hilft es so nicht weiter?

Mfg


----------



## mrfreeman12 (23. Jan 2004)

Es geht jetzt nicht um die Variable! Ich habe nur mit 'name' versucht den Objektnamen dynamisch zu machen. Das ging nicht. Was ich möchte, ist: Da ich nicht weiß, wieviele autos (Objekte der Klasse AUTO) erstellt werden, auf die Objekte trotzdem zugreifen können.
BEISPIEL: Klasse AUTO enthält Variablen, die Breite, Höhe etc. des Autos aufnehmen können. Nun steht in der Start-Klasse (main) "Drücken Sie 1 um ihr Auto einzutragen" Drückt der User 1 wird ein "neues" Objekt der Klasse AUTO erstellt. Drückt der User 2 werden zuerst alle eingetragenen Autos angezeigt, dann kann man auswählen, von welchem Auto man die Daten angezeigt bekommen will. Nun kommt der x-te User und will sein Auto eintragen! Er drückt 1 und Objekt 'autox' wird erstellt. Das Problem ist dieses X bzw. wie ich den an den Objektnamen ranbekomme.
Wie war es nochmal mit Arrays? Meinst du Objektarray? Hab auch schon daran gedacht, aber...


----------



## bygones (23. Jan 2004)

wenn du von anfang an nicht weißt, wieviele Autos eingegeben werden bringen arrays nichts (du musst sie vorher fest definieren).

Ich würde dir z.B. zu einem Vector raten. Dort kannst du einfach das erstellte Objekt hinzufügen. Du kannst auch über einen Index auf die Elemente zugreifen usw.

http://java.sun.com/j2se/1.4.1/docs/api/java/util/Vector.html


----------



## exorzist (23. Jan 2004)

deathbyaclown hat gesagt.:
			
		

> wenn du von anfang an nicht weißt, wieviele Autos eingegeben werden bringen arrays nichts (du musst sie vorher fest definieren).



soweit ich weiss, oder zumindest dachte ich das immer, kann man Arrays erweitern, wenn notwendig?! Irre ich mich?


----------



## bygones (23. Jan 2004)

exorzist hat gesagt.:
			
		

> deathbyaclown hat gesagt.:
> 
> 
> 
> ...



Da irrst du dich. Man muss einen Array immer anfangs mit einer Größe definieren:

```
// geht nicht
String[] s1 = new String[]
// so gehts
String[] s2 = new String[10];
```

Man kann natürlich einen Array anlegen und dann, wenn man mehr braucht einen neuen anlegen und den alten reinkopieren usw. - aber daür gibt es ja Collections....


----------



## marsias (23. Jan 2004)

Hi!

Wenn du diese auto-Objekte abspeichern willst, dann rate ich dir
auch collections zu benutzten z.B. Vector, ArrayList usw.

Dann kannst du ein objekt erzeugen und es dann in eine Collection
setzten.


```
....
Vector v = new Vector();
v.add(auto);
...
```


Mfg


----------



## mrfreeman12 (23. Jan 2004)

Erstmal vielen Danke an alle, die hier etwas reingeschriebn haben!
Also, so wie ich es verstanden habe geht es mit dynamischen Objektnamen nicht! :cry: Na gut.
Versuche es also mit Vektoren, von denen ich keine Ahnung habe.

```
.... 
Vector v = new Vector(); 
v.add(auto); 
...
```
Werden Objekte einfach reingefügt ohne Platzeingabe? Wie kann ich nun auf z.B. das 5-te Auto zugreifen?
Danke!


----------



## bygones (23. Jan 2004)

die Klasse Vector stellt zum hinzufügen zwei Möglichkeiten


```
void add(int index, Object element) 
          Inserts the specified element at the specified position in this Vector. 
boolean add(Object o) 
          Appends the specified element to the end of this Vector.
```

zum holen:

```
Object elementAt(int index) 
          Returns the component at the specified index.
```

hierbei ist es wichtig, dass dies ein Objekt der Klasse "Objekt" zurückliefert - du musst also das Objekt dann zu deiner Klasse casten.

Mehr Infos gibts unter dem Link, den ich oben gepostet habe !!


----------

