Ich habe eine leere HashMap, in die ich Inseln generieren will. Derzeit nur 2 Objekte: Weed für Wiese und Water für Wasser.
Die Methode schaut zwar ziemlich kompliziert aus, ist aber im grunde ganz einfach. Trotzdem habe ich sie durchkommentiert, damit ihr euch auskennt:
Das Problem ist, wenn ich in Zeile 3 der Methode genTerrain(HashMap) die Zahl, die das Generieren in diese Richtung abbricht (soll ja zufällig sein) runtersetze, bekomme ich eine Heap-Space-Exception. Nur ich kann nicht glauben, dass diese Methoden annähernd so viel Speicher verbrauchen, wie die VM von Java reserviert. (Glaube 128 MB, ist aber auch egal.) Also muss der Fehler wo anderst sein, aber finde einfach nix. Kann mir bitte wer sagen, wo er ist?
Die Methode schaut zwar ziemlich kompliziert aus, ist aber im grunde ganz einfach. Trotzdem habe ich sie durchkommentiert, damit ihr euch auskennt:
Java:
private HashMap<String, Terrain> startGenTerrain()
{
HashMap<String, Terrain> terrainMap =
new HashMap<String, Terrain>();
int x = (int)Math.floor(Math.random() * 50) * 40; //Zufaellige Position der Insel
int y = (int)Math.floor(Math.random() * 50) * 40; //Zufaellige Position der Insel
terrainMap.put(x + ";" + y, new Weed(x, y)); //Erste Wiese einfuegen
terrainMap = this.genTerrain(x + 40, y, terrainMap); //Insel in jede Richtung erweitern
terrainMap = this.genTerrain(x - 40, y, terrainMap); //Insel in jede Richtung erweitern
terrainMap = this.genTerrain(x, y + 40, terrainMap); //Insel in jede Richtung erweitern
terrainMap = this.genTerrain(x, y - 40, terrainMap); //Insel in jede Richtung erweitern
return(terrainMap);
}
private HashMap<String, Terrain> genTerrain(int x, int y, HashMap<String, Terrain> terrainMap)
{
int rand = (int)Math.floor(Math.random() * 10); //Zahl um Generierung in die Richtung zu beenden
if(rand <= 9) //Beenden
return(terrainMap);
terrainMap.put(x + ";" + y, new Weed(x, y)); //Wiese einfuegen
terrainMap = this.genTerrain(x + 40, y, terrainMap); //Insel erweitern
terrainMap = this.genTerrain(x - 40, y, terrainMap); //Insel erweitern
terrainMap = this.genTerrain(x, y + 40, terrainMap); //Insel erweitern
terrainMap = this.genTerrain(x, y - 40, terrainMap); //Insel erweitern
return(terrainMap);
}
private HashMap<String, Terrain> fillMapWithWater(HashMap<String, Terrain> terrainMap)
{
//Jede Tilde, die nicht zu einer Insel gehoert, mit Wasser fuellen.
for(int i = 0; i < 50; i++)
for(int j = 0; j < 50; j++)
if(terrainMap.get(j * 40 + ";" + i * 40) == null)
terrainMap.put(j * 40 + ";" + i * 40, new Water(j * 40, i * 40));
return(terrainMap);
}
Das Problem ist, wenn ich in Zeile 3 der Methode genTerrain(HashMap) die Zahl, die das Generieren in diese Richtung abbricht (soll ja zufällig sein) runtersetze, bekomme ich eine Heap-Space-Exception. Nur ich kann nicht glauben, dass diese Methoden annähernd so viel Speicher verbrauchen, wie die VM von Java reserviert. (Glaube 128 MB, ist aber auch egal.) Also muss der Fehler wo anderst sein, aber finde einfach nix. Kann mir bitte wer sagen, wo er ist?