# viele Objekte erzeugen



## javakaba (30. Jan 2006)

Hallo,
kann ich z.B. mit einer Schleife viele Objekte einer Klasse erzeugen  ???:L


----------



## meez (30. Jan 2006)

Nein...viele Objekte kann man nicht erzeugen! (Nur wenige)...

Ok...doch...Es geht...


----------



## javakaba (30. Jan 2006)

und wie erzeuge ich "wenige" Objekte? (Schleife?)


----------



## meez (30. Jan 2006)

Es gibt drei Möglichkeiten..
Erzeugen ohne die Referenz zu halten, Referenz in einer Collection halten, Referenz in einem Array halten:

1.

```
for (int n=0;n<100;n++) {
      new ABC();
   }
```


2.

```
List objects = new ArrayList(100);
   for (int n=0;n<100;n++) {
      ABC abc = new ABC();
      objects .add(abc);
   }
```


3.

```
ABC[] objects = new ABC[100];
   for (int n=0;n<100;n++) {
      ABC abc = new ABC();
      objects[n]= abc;
   }
```


----------



## Leroy42 (30. Jan 2006)

meez hat gesagt.:
			
		

> 3.
> 
> ```
> ABC[] objects = new ABC[100];
> ...



 :noe: 


```
for (int n=0; n < ABC.length; ++n)
```

Einem Anfänger lieber gleich Fallstricke für die Zukunft aus dem Weg räumen!
 8)


----------



## bygones (30. Jan 2006)

++n oder n++ ist erstmal wurscht ;-)

man kann den schönen Mittelweg nehmen -> Länge als konstante definieren ^^


----------



## meez (30. Jan 2006)

Naja...Dann meint er nachher noch, er muss es mit der List auch so machen..


----------



## javakaba (30. Jan 2006)

ok danke!!!!! :toll:


----------



## Murray (30. Jan 2006)

deathbyaclown hat gesagt.:
			
		

> ++n oder n++ ist erstmal wurscht ;-)



Es sei denn, man kann auch in Java alte C-Gewohnheiten nicht ablegen und ist der Meinung, möglichst viel Code in einer Zeile unterbringen zu wollen, dann könnte man nämlich schreiben:


```
ABC[] objects = new ABC[100]; 
for (int n=0;n<objects.length; objects[n++] = new ABC());
```

Ist aber nicht sehr empfehlenswert: so etwas dürfte für die meisten Java-Entwickler etwas ungwöhnlich aussehen und ist daher nicht sehr wartungsfreundlich.


----------



## Guest (30. Jan 2006)

ok, wenn ich jetzt jedem Objekt einen z.B. anderen x-Wert geben möchte (Koordinatensystem), geht das?


----------



## javakaba (30. Jan 2006)

gute Frage, geht das?


----------



## AlArenal (30. Jan 2006)

Anonymous hat gesagt.:
			
		

> ok, wenn ich jetzt jedem Objekt einen z.B. anderen x-Wert geben möchte (Koordinatensystem), geht das?



Wo soll das Problem sein?


```
List manyX= new ArrayList();
   for (int x = 0; x < 100; x++) {
      Integer xInt = new Integer(x);
      manyX.add(xInt);
   }
```


----------



## Bleiglanz (30. Jan 2006)

nebenbei ein Tipp für Anfänger: 

niemals die Konstruktoren von Integer (und die aller Wrapper) und nie den Konstruktor von String aufrufen


```
new String("foo");
new Integer(13);
```
ist schlecht, immer valueOf verwenden

```
for (int x = 0; x < 100; x++) {
      manyX.add(Integer.valueOf(x));
   }
```
(gerade bei dem Beispiel ist das sinnvoll, die Werte -128 bis 127 sind nämlich vordefiniert)


----------



## AlArenal (30. Jan 2006)

1. make it work
2. make it fast 
3.


----------



## javakaba (30. Jan 2006)

Hallo,
ich möchte ein Applet erstellen, wo 50 Objekte (rote Punkte) auf dem Fenster hin und her laufen. 
Ich möchte die Objekte über eine Schleife und Liste "laden". Jedes Objekt hat natürlich eine andere x-kor. 
(z.B. x=+10) wie soll das gehen?????


----------



## PoiSoN (31. Jan 2006)

mal pseudomäßig:
	
	
	
	





```
int x = 0, y = 0;
   for (int i = 0; i < 50; i++) {
      roterPunkt[i].setKoordinaten(x,y); 
      x += 10;
   }
```
Damit die Dinger sich bewegen, musst du natürlich mit Threads arbeiten


----------



## Guest (31. Jan 2006)

Bei mir entsteht folgender Fehler:


```
public void init() {
    Graphics g = getGraphics();			 	
		
     x = 10, y = 10; 
   Gegner[] liste = new Gegner[50];
    for (int i = 0; i < 50; i++) { 
   liste[i].setKoordinaten(x,y); 
     x += 10; 
     } 
}
```
java.lang.NullPointerException
	at test.init(kugelgzg.java:16)
	at sun.applet.AppletPanel.run(Unknown Source)
	at java.lang.Thread.run(Unknown Source)

was bedeutet das?


----------



## bummerland (31. Jan 2006)

mit new Gegner[50] hast du noch keine 50 Objekte. du musst die auch noch anlegen, in deiner schleife.


----------



## Guest (31. Jan 2006)

warum wird nichts angezeigt?
auszug aus code


```
public void init() {
			Graphics g = getGraphics();			 	
				
			int x = 10, y = 10; 
			Gegner[] liste = new Gegner[50];
			 for (int i = 0; i <50; i++) { 
			 	Gegner geg = new Gegner(g);
			 	liste[i]=geg;
			 	liste[i].setKoordinaten(x,y); 
			     x += 10; 
			}
			
		
class Gegner /*extends Thread*/  {
		
	private Graphics g;
	private int x;
	private int d = 20;
	private int y;
	
	public  Gegner (Graphics graphics) {
			g = graphics;
			
	}
	
	

	public void setKoordinaten(int x,int y){
		g.setColor(Color.red);
	    g.fillOval(x,y,d,d);
	}
```


----------



## Guest (31. Jan 2006)

möglicherweise solltest du noch ein repaint(); machen


----------



## Guest (1. Feb 2006)

geht leider auch nicht


----------



## SlaterB (1. Feb 2006)

wozu so eine komplexe Frage?
wozu sich mit irgendwelchen Schleifen/ Variablen x,y, d deren Wert man kaum verfoglen kann/ Zwischenobjekte die auf langen Weg an das Graphics-Objekt kommen/.. aufhalten, wenn die Grundlagen noch nicht klappen?

dein Problem ist gleichbedeutend mit der Frage 'warum funktioniert das hier nicht?: '


```
public void init() {
         Graphics g = getGraphics();             

         g.setColor(Color.red);
         g.fillOval(10,10,20,20);
}
```
versuche das zu lösen, dann findest du auch für das andere die Lösung

liegt es vielleicht daran, dass die init-Operation überhaupt nix mit dem Zeichnen des Applets zu tun hat?
ich kenn mich da nicht so aus, aber das erste Beispiel-Applet hier:
http://www.galileocomputing.de/open...htm#Rxxjavainsel_190002256DasersteHalloApplet
läßt eher die paint-Operation fürs Zeichnen vermuten

bedenke das dort das Graphics-Objekt bei jedem paint-Aufruf neu erzeugt wird,
es bringt also nix das irgendwo als Instanzvariable zu speichern


----------

