[Monkey] Mehrdimensionale Arrays. Index out of Bonds
Übersicht

![]() |
DottakopfBetreff: Mehrdimensionale Arrays. Index out of Bonds |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hallo Blitzer,
warum ?? Code: [AUSKLAPPEN] Global aTile_Map:=[New Int[99], New Int[99]] erstellt einen Mehrdimensionalen Array. Quelle: http://www.monkeycoder.co.nz/C...?topic=162 Code: [AUSKLAPPEN] 'Main Game... Method OnCreate:int() For Local y:Int = 0 To 10 For Local x:Int = 0 To 10 aTile_Map[x][y] = 0 Next Next Return (0) End Führt zu einem Indexfehler im Array. Ist für mich nicht nachvollziehbar. Warum ? ich Gehe gerade die Samples durch und finde so etwas: (Scheinbar wird alles in einen 1 dimensionalen Arry gestopft und anhand der MapSize_X der Umbruch in der Y Achse vorgenommen... Ernsthaft ?? Code: [AUSKLAPPEN] Local level:Int[] = [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15,15,15,15, 4, 9, 0, 9, 4,15,15,15,15, 4, 4, 4, 4, 4, 9, 0, 9, 4, 4, 4, 4, 4, 12,12,12,12,12, 9, 0, 9,12,12,12,12,12, 7, 7, 7, 7, 7, 9, 0, 9, 7, 7, 7, 7, 7, 5,15, 5,15, 5, 9, 0, 9, 5,15, 5,15, 5, 7,15, 7,15, 7, 9, 0, 9, 7,15, 7,15, 7, 4, 4,15, 4, 4, 9, 0, 9, 4, 4,15, 4, 4, 3,15, 3,15, 3, 9, 0, 9, 3,15, 3,15, 3, 6,15, 6,15, 6, 9, 0, 9, 6,15, 6,15, 6, 3, 3, 3, 3, 3, 9, 0, 9, 3, 3, 3, 3, 3] CopyBoard(level) |
||
- Zuletzt bearbeitet von Dottakopf am So, März 09, 2014 21:22, insgesamt einmal bearbeitet
![]() |
BladeRunnerModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ich habe kein Monkey und kan nur raten, aber es sieht mir hier so aus als ob Du nicht ein Array of Arrays erstellst [][], sondern ein mehrdimensionales Array [,].
Und dann geht der Zugriff natürlich hoch. |
||
Zu Diensten, Bürger.
Intel T2300, 2.5GB DDR 533, Mobility Radeon X1600 Win XP Home SP3 Intel T8400, 4GB DDR3, Nvidia GF9700M GTS Win 7/64 B3D BMax MaxGUI Stolzer Gewinner des BAC#48, #52 & #92 |
![]() |
ZEVS |
![]() Antworten mit Zitat ![]() |
---|---|---|
Wenn Monkey in diesem Zusammenhang in etwa wie BlitzMax funktioniert, erzeugst du ein mehrdimensionales Array (bzw. eher ein Array von Arrays), welches in der ersten Dimension zwei und in der zweiten 99 oder 100 (bei Monkey kenne ich mich da nicht aus) groß ist. Bei BlitzMax erzeugt z.B. BlitzMax: [AUSKLAPPEN] Global a:Int[] = [2,3,4]ein Array von drei Integern, entsprechend erzeugt BlitzMax: [AUSKLAPPEN] [ New Int[99], New Int[99] ]ein Array von zwei Integer-Arrays. Weil du bis 10 iterierst, kommt es zum Fehler. ZEVS |
||
![]() |
Dottakopf |
![]() Antworten mit Zitat ![]() |
---|---|---|
Äh ![]() Code: [AUSKLAPPEN] Global aTile_Map:Int[] =[10, 10] erstellt ein eindimensionales Array mit den Indizies: 0=10 1 = 10 auf das ganz normal zugegriffen werden kann. ich habe auch verstanden das [ New Int[99], New Int[99] ] zwei arrays im Array mit den Indizies 0 - 1 erstellt. nur wie funtzt jetzt ein ganz normaler 2 Dimensionaler Array? So Komplex ist das doch garnicht. bzw. wie funtkioniert der korrekte zugriff auf "[ New Int[99], New Int[99] ]" Bitte entschuldigt wenn ich so plump frage aber ich verstehe den Zugriff nicht. ~Edit~ gerade habe ich das gebastelt und es funtz.. nur ist da auch "Geschickt so" Code: [AUSKLAPPEN] '2 Dimensonalen Array erstelln Global aTile_Map:int[30][] Code: [AUSKLAPPEN] 'Array 2 Dimension erstellen bzw. erste Dimenson definieren.. For Local x:int = 0 To 29 aTile_Map[x] = New Int[30] Next Code: [AUSKLAPPEN] 'Nun den 2 Dimensionalen Array wie gewohnt befüllen For Local x:int = 0 To 29 For Local y:Int = 0 To 29 aTile_Map[x][y] = 1 Next Next ist das so sinnvoll ? oder gehts irgendwie cooler --> ja ich bin ein noob ^^ |
||
PhillipK |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
@DottaKopf:
Das ist leider auch die einzige variante, wie ich je Arrays erstellen konnte. Allerdings kann man das ganze dafür auch "Auslagern" in eine Hilfsklasse. Denn: Monkey unterstützt Generics ^^ Fakt ist: Mehrdimensionale Arrays gibt es nichtmehr. Array of Arrays oder eben garnichts ![]() Folgender Code: Code: [AUSKLAPPEN] Strict Class Generics<T> Function CreateArray1D:T(indices:Int) Return New T[indices] End Function CreateArray2D:T[][](indices1:Int, indices2:Int) Local tmp:T[][] tmp = tmp.Resize(indices1) For Local i:Int = 0 Until indices1 tmp[i] = tmp[i].Resize(indices2) Next Return tmp End Function CreateArray3D:T[][][] (indices1:Int, indices2:Int, indices3:int) Local tmp:T[][][] tmp = tmp.Resize(indices1) For Local i:Int = 0 Until indices1 tmp[i] = Generics<T>.CreateArray2D(indices2, indices3) Next Return tmp End End Schafft aber abhilfe. Aufzurufen ist das ganze so: Code: [AUSKLAPPEN] Local arr:Int[][] = Generics<Int>.CreateArray2D(10, 10)
Code: [AUSKLAPPEN] Local arr:Float[][] = Generics<Float>.CreateArray2D(10, 10)
Code: [AUSKLAPPEN] Local arr:String[][] = Generics<String>.CreateArray2D(10, 10)
Code: [AUSKLAPPEN] Local arr:Object[][] = Generics<Object>.CreateArray2D(10, 10)
Code: [AUSKLAPPEN] Local arr:Image[][] = Generics<Image>.CreateArray2D(10, 10)
Code: [AUSKLAPPEN] Local arr:Byte[][] = Generics<Byte>.CreateArray2D(10, 10)
Ich meine mich zu erinnern, das mich das anfangs auch ziemlich angekotzt hat. Aber naja, da will man mal nicht meckern - jede sprache hat doch irgendwie ihre macken.. Nebenbei: Code: [AUSKLAPPEN] Class Generics<T> Intern wird beim compilen für jeden angeforderten typ T eine eigene klasse hiervon gebastelt - wie effizient das geschieht weiß ich leider nicht. Allerdings hilft uns das bei dem Arrayproblem ungemein: So hast du die möglichkeit, für jeden gegenwärtigen und zukünftigen Typ den du in deinem Projekt verwendest einen Array zu erstellen. Edit: [quote=Dottakopf] '2 Dimensonalen Array erstelln Global aTile_Map:int[30][][/quote] huch, das kannte ich so noch garnicht o.O Mal testen, das könnte meiner faulheit helfen^^ |
||
![]() |
Dottakopf |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hey die Classe ist ja super!
den im Moment habe ich das Problem das ich den ersten Indizie nicht dynamisch hinbekomme. Alles in allem werde ich um die Klasse die mir n 2D Array baut nicht umher kommen. Danke !.. wirklich super ! Warum zum geier wird das eigentlich in keinem der ersten Tutorials oder Samples in Monkey gezeigt. *Seufz..* |
||
Rechtschreibfehler gelten der allgemeinen Belustigung! |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group