negativer Index bei ArrayList...

Nobody

Mitglied
Hallo nochmal ne klitzekleines Problemchen hab ich.

Ich bilde die Positionen eines Spielfeldes(x,y) mittels ArrayList nach, nun habe ich im moment noch ein Mehr-Dimensionales Array dafür in verwendung und hatte eben beim testen eine Exception.

Begründung hierfür ist das man im Spielfeld auch über die Spielfeldgrenzen hinaus fliegen kann und dann bei negativen Koordinaten ist, dies habe ich natürlich mit einbedacht und liess das Array bei 20,20 starten dann kommen 24*24 Spielfeld und dann nochmal 20,20 "reserve".

Nur hatte ich beim "übertriebenen" testen die Position soweit ins negative gefahren, das die "reserve" nicht ausreichte.

Da ich auch bei einer Mehrdimensionalen ArrayList , das problem mit negativen indexen haben werde die Frage, wie würdet ihr das machen?

mfg
 
Kannst du per catch abfangen und darauf reagieren. Mehr fällt mir dazu jetzt nicht ein. Aber wozu du eine List verwenden willst ist mir nicht ganz klar. Ein 2D-Array eignet sich dafür doch viel besser.
 
Ok Catch wäre ne Möglichkeit aber keine wirkliche Lösung.

ArrayList verwende ich weil es mir hier empfohlen wurde, und 2Dimensional ist das jetzige Array auch nur weil ich momentan darin einen String Speichere, worin ich UserID´s mit trennungszeichen aneinander Reihe, mit replace werden sie entfernt und hinzugefügt durch "angehängen".

Das geht zwar ist aber unschön, daher dachte ich zuerst an ein Set[][], was mir allerdings dann eine genericArray are not Allowed Fehlerausgabe beim Compilieren zaubert.
Mache ich stattdessen ein Dreidimensionales int Array um die UserID´s zu speichern, müsste ich das soweit auslegen das auch ja im schlimmsten der Fälle 500 user gleichzeitig auf einer Position sein könnten, dann hätte ich im umgekehrt schlimmsten Fall aber auch 500 leere Felder wenn dort keiner steht, alles sehr unperformant.

Darum bin ich nun bei ner 3Dimensionalen ArrayList gelandet.
Was dann so ausschaut:

PHP:
private ArrayList<ArrayList<ArrayList<Integer>>> mapArray = new ArrayList<ArrayList<ArrayList<Integer>>>();//here you will have [x][y] coordinates and in there a Set od (int) UserID

Nur wie gesagt würde mir auch hier dsa Problem begegnen bei übermässig negativer Koordinate, was im spiel zwar kaum vorkommen wird weil der Spielcharakter Tod sein würde bevor er die gefährliche Position erreicht, jedoch ist es ein Problem deren Lösung mich Interessiert und dazu fiele mir gerade nur ein daraus ein Asoziatives Array zu machen und die int in String umzuwandeln.

Aber eigentlich wollte ich weg von Strings bzw Umwandlung in Strings und hier die "schnellstmögliche" variante verwenden, da in der Anwendung 5*5 Felder pro tick und User durchlaufen werden, ein tick sind Aktuell 150ms was dann ca. 170 Schleifendurchläufe pro User und Sekunde bedeuted.
Für sich alleine genommen eine lächerliche Zahl, bei 2000 Usern und dem Gedanken im Hinterkopf das in den 150 ms noch einige andere Dinge ablaufen, ist die Zahl dann nicht mehr so lächerlich.

mfg
 
Zuletzt bearbeitet:

Neue Beiträge

Zurück