# in Konstruktor neue Objekte einer anderen Klasse erzeugen



## Kaschina (10. Jun 2011)

Hallo,

ich soll in einer Welt (Klasse) schon bei Erschaffung der Welt => im Konstruktor die Objekte, die es beinhaltet erstellen... erster Lösungsansatz war mit einer For-Schleife die Methode, die das Objekt erstellen soll, so oft aufzurufen, bis die gewünschte Objektmenge erstellt ist. 
Soweit so gut, aber ich überschreibe jedesmal wieder das gleiche Objekt...


```
for (int i = 0; i < anzahl; i++)
		setCargo();
```
noch weniger funktioniert cargo (vorinitialisiert) = setCargo();


----------



## Andi_CH (10. Jun 2011)

Etwas mehr Code wäre  gut :-(


----------



## me.toString (10. Jun 2011)

Also dein Lösungsansatz ist schon richtig. Was das Überschreiben des Objektes betrifft, wäre es sinnvoll, wenn wir die Methode setCargo() sehen könnten. Ich an deiner Stelle würde bei setCargo() einen Breakpoint setzen, den Debugger anwerfen und dann Schritt für Schritt schauen, was dein Programm so macht ... und dann solltest du von selbst drauf kommen.


----------



## Andi_CH (10. Jun 2011)

Ich bin 99% sicher dass so etwas ist

```
MeinKlasse k;
k = new MeineKlasse();
k = new Meine Klasse();
```

oder gar nur

```
new MeineKlasse();
new MeineKlasse();
```


----------



## nrg (10. Jun 2011)

nimm eine ArrayList


----------



## njans (10. Jun 2011)

```
MeinObjekt[] objekte= new MeinObjekt[Anzahl];

for (int jedesObjekt = 0; jedesObjekt < objekte.length;jedesObjekt++)
{
objekte[jedesObjekt] = new MeinObjekt();
}
```
So etwas vielleicht?^^


----------



## Kaschina (10. Jun 2011)

Nur halt in etwas mehr...

```
/**
 * 
 */

public class World {
	
	/**
	 * das aktuelle welt-objekt
	 */
	String[][]world;
	
	/**
	 *  Maßangaben für Welt
	 */
	int a;
	int b;
	
	/**
	 * beeinhaltet alle erzeugten CargoObjekte
	 */
	Cargo[]cargomenge;
	
	/**
	 * zählt das Array hoch, so dass jedes Cargoobjekt Platz hat
	 */
	int counter;
	
	/**
	 * zeigt, ob ein feld bereits besetzt ist. anfangs alles false => unbesetzt
	 */
	boolean[][]besetzt;
	
	/**
	 * sammelt alle benutzten Buchstaben, damit Objekte unterschiedliche Buchstaben haben
	 */
	String benutzteBuchstaben = "";
	
	/**
	 * ein erstes Cargo Objekt:
	 */
	 Cargo object;
	 String name; // cargoname
	 
	 /**
	  * anzahl der benötigten objekte
	  */
	 
	 int anzahl;
	 
	/**
	 * @param a Länge x Koordinate
	 * @param b Breite y Koordinate
	 */
	/**Konstruktor
	 * erstellt eine neue Welt mit der Länge und Breite der Eingabe
	 * setzt die nötige Anzahl von Objekten und (erstellt diese im Idealfall)
	 */
	World(int a, int b) {
		this.a = a;
		this.b = b;
		world = new String[a][b];
		besetzt = new boolean[a][b];
		/**
		 * Anzahl der benötigten Objekte festlegen
		 */
		this.anzahl =(min((int)Math.sqrt(this.a * this.b),26));
		
		cargomenge = new Cargo[anzahl];
		for (int i = 0; i < anzahl; i++)
		setCargo();
	}
	/**
	 * erzeugt das Minimum zweier Zahlen
	 * @param a
	 * @param b
	 * @return minimum
	 */
	int min(int a, int b) {
		if (a > b)
			return b;
		else 
			return a;
	}
	
	/**
	 * prüft, ob ein Buchstabe schon vorkam
	 */
	boolean buchstabeBesetzt(char ist) {
		for (int i = 0; i < benutzteBuchstaben.length(); i++) {
			if (benutzteBuchstaben.charAt(i) == ist) {
				return true;
			}
		}
			return false;
	}
	/**
	 * erstellt einen Zufallsbuchstaben
	 * @return char
	 */
	char randomChar() {
		return (char) (64 + (int) Math.ceil(Math.random() * 26));
	}
	
	/**
	 * das übliche toString... 
	 * 
	 */
	public String toString() {
		String result= "";
		for (int i = 0; i < this.world.length; i++) {
			for (int j = 0; j < this.world[i].length; j++) {
					if(object.isLocation(i, j)) {
					result += gesuchterCargo(i, j).charAt(0);
					}
					else {
						result += ".";
					}
			}
			result += "\n";
		}
		return result;
	}
	/**
	 * Objekt an best Stelle ausgeben
	 */
	String gesuchterCargo(int i, int j) {
		String gesucht = "";
		for (int m = 0; m < anzahl; m++) {
			if (cargomenge[m].getXPosition() == i && cargomenge[m].getYPosition() == j) {
				gesucht += cargomenge[m].toString();
				break;
			}
			else {
				gesucht +="?";
			}
		}
		return gesucht;	
	}
	
	/**
	 * ein cargo an einer bestimmten stelle erzeugen
	 */
	Cargo setCargo() {
		// Objekte werden zufällig verteilt
			char zufall =  randomChar();
			if(buchstabeBesetzt(zufall)) {
				zufall = randomChar();
			}
			else {
				name = zufall + "bot";
			}
			int x  = (int) Math.random()*a;
			int y = (int)Math.random()*b;
			
			if(besetzt[x][y]) {
				x = (int) (Math.random()*a);
				y = (int)(Math.random() *b);
			}
			Cargo object = new Cargo(x,y, name);	
			benutzteBuchstaben += zufall;
			besetzt[x][y] = true;
			cargomenge[counter] = object;
			counter++;
			System.out.println(object.getName());
			return object;
		}

	/**
	 * @param args
	 */
	public static void main(String[]args) {
		
		World test = new World(3 , 4);
	System.out.println(test.toString());
	}
}


/**
 * 
 */

public class Cargo {
	int[] location = new int[2];
	int x;
	int y;
	String name;
	
	/**
	 * Konstruktor. 
	 * X und Y Koordinaten, Name
	 */
	Cargo(int x , int y, String name) {
		this.x = x;
		this.y = y;
		this.name = name;
		
	}
	int getXPosition() {
		return x;
	}
	int getYPosition() {
		return y;
	}
	
	boolean isLocation( int n , int m) {
		if (getXPosition() == n && getYPosition() == m) {
			return true;
		}
		else {
			return false;
		}
			
	}
	String getName() {
		return name;
	}
	
	String cargoToString() {
		return getName() + "; " + getXPosition() + " , " + getYPosition();
	}
}
```

so bitteschön


----------



## Kaschina (10. Jun 2011)

Dass das alles eine große Baustelle ist und Vieles nicht passt, ist mir klar, sonst würd ich es nicht posten müssen...
Das ist an sich schon alles viel zuviel drumrum.... Aber noch haperts am einfach denken.


----------



## Dan (10. Jun 2011)

```
cargomenge = new Cargo[anzahl];
   for (int i = 0; i < anzahl; i++)
        setCargo();
```

sollte zu 


```
cargomenge = new Cargo[anzahl];
    for (int i = 0; i < anzahl; i++)
        cargomenge[i]=setCargo();
```

setGargo gibt ja ein Cargo zurück, du musst ihm auch noch sagen wohin das gespeichert wird.

wenn wir grade beim Zurückgeben sind, die Methode sollte eher sowas wie getCargo() heißen.


----------



## Kaschina (10. Jun 2011)

Vielen Dank, damit hab ich dann zumindest paar Zeilen an Code schonmal gespart 
Ist geändert...

Bin immer noch für jeden Fingerzeig dankbar!


----------

