[Monkey] Arrays - seltsamer Fehler
Übersicht

![]() |
TennisballBetreff: Arrays - seltsamer Fehler |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hallo,
ich habe schon etwas mit der Demo herumgespielt und habe ein ominöses Problem mit den Arrays: Code: [AUSKLAPPEN] Class MyGame Extends App
Field testarray:=[New Int[3], New Int[4]] Method OnCreate () testarray[2][2] = 5 '<- genau hier kommt ein Fehler "Array index out of range" End Method OnUpdate () End Method OnRender () Print testarray[2][2] End End Wisst ihr, wie man das beheben könnte? mfg, Tennisball |
||
![]() |
coolo |
![]() Antworten mit Zitat ![]() |
---|---|---|
Da Arrays in Monkey sehr rudmentär vorhanden sind, muss man sich das Dimensionieren selber Programmieren:
BlitzMax: [AUSKLAPPEN] Function IntArray2D:Int[][] (X%,Y%) |
||
http://programming-with-design.at/ <-- Der Preis ist heiß!
That's no bug, that's my project! "Eigenzitate sind nur was für Deppen" -Eigenzitat |
- Zuletzt bearbeitet von coolo am So, März 13, 2011 11:46, insgesamt einmal bearbeitet
![]() |
Lobby |
![]() Antworten mit Zitat ![]() |
---|---|---|
So ominös finde ich dieses Problem gar nicht, denn wie in BlitzMax geht der Index von Arrays von 0 bis zur Anzahl der Felder -1. Dein testarray hat genau zwei Felder (welche jeweils einmal mit New Int[3] und einmal mit New Int[4] gefüllt sind). Aus diesem Grund muss der Zugriff auf testarray[2] fehlschlagen. Wenn Du die 2 durch eine 0 oder eine 1 ersetzest, so wird dein Code funktionieren ![]() Hier nocheinmal der damit verbesserte, vollständige Code, nur um weitere Fehler auszuschließen: BlitzMax: [AUSKLAPPEN] Import mojo Coolo, sofern Du Monkey und nicht BlitzMax meinst, hast Du die Arrays betreffend selbstverständlich recht. |
||
![]() |
coolo |
![]() Antworten mit Zitat ![]() |
---|---|---|
Lobby: Tennisballs Ansatz sollte genau so funktionieren, ist jedoch ein Bug, dass es nicht funktioniert. Siehe: http://www.monkeycoder.co.nz/C...?topic=215 . | ||
http://programming-with-design.at/ <-- Der Preis ist heiß!
That's no bug, that's my project! "Eigenzitate sind nur was für Deppen" -Eigenzitat |
![]() |
Lobby |
![]() Antworten mit Zitat ![]() |
---|---|---|
Als Bug würde ich das nicht bezeichnen, im Gegenteil, alles andere wäre wohl ein Bug, warum aber mark das selbst nicht zu verstehen scheint ist mir ein Rätsel. Tennisballs erster Ansatz könnte auch so umgeschrieben werden, um das zu verdeutlichen:
BlitzMax: [AUSKLAPPEN] Class MyGame Extends App |
||
TheoTown - Eine Stadtaufbausimulation für Android, iOS, Windows, Mac OS und Linux |
![]() |
Tennisball |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hallo,
also irgendwie sind das dann keine richtigen Arrays, wie in BlitzMax z.B. ?! Dann werd ich das wohl irgendwie anders zusammenbasteln müssen. mfg, Tennisball |
||
![]() |
BladeRunnerModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Es sind richtige Arrays, Du musst sie nur selbst initialisieren ![]() |
||
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 |
![]() |
Midimaster |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hallo Tennisball,
der Weg, den Dir coolo aufzeigt ist genau das, was Du suchst. Lobby zeigt zwar auf, warum Deine Schreibweise nicht funzt, verwirrt aber mehr als er nützt. Am Ende des Threads wirkt es so, als müsse man bei mehrdimensionalen Array in MONKEY kapitulieren. Da dieses Problem sicherlich noch viele Leute mehr interessieren wird, verdeutliche ich jetzt noch einmal den Lösungsweg: Zunächst das FAZIT vorneweg, für alle, die es gar nicht so genau wissen wollen: BlitzMax: [AUSKLAPPEN] Global a:Int[15,9]...in BlitzMax wird in Monkey zu.... BlitzMax: [AUSKLAPPEN] Global a:Int[][] =IntArray2D(15,9) ...wobei diese Funktion an den eigenen Code anzuhängen ist: BlitzMax: [AUSKLAPPEN] Function IntArray2D:Int[][] (X%,Y%) So nun noch die Beschreibung: BlitzMax: [AUSKLAPPEN] Global a:Int[15,9] ...erstellte in BMax ein Feld mit 15x9 Elementen von a[0,0] bis a[14,8]. Anschließend konnte man es gleich verwenden: BlitzMax: [AUSKLAPPEN] a[3,3]=345 In MONKEY wird durch den Befehl...BlitzMax: [AUSKLAPPEN] Global a:Int[][]...zwar auch ein mehrdimensionales Array erstellt, aber jetzt muss man erst jedes einzelne Elemente darin erzeugen: BlitzMax: [AUSKLAPPEN] Local a:Int[15][]Die erste Dimension kann in einem Zug erstellt werden. Sie enthält dann 15 Elemente, die jedes für sich aber noch keine Unterelemente enthalten. BlitzMax: [AUSKLAPPEN] Local a:Int[15][]Mit der For/Next-Schleife werden nun alle 15 mit jeweils einem 9-elementigen Array gefüllt. Coolo's Funktion vereinfacht nun diese Arbeit indem sie uns eine Funtion zur Verfügung stellt, die genau dem alten BMax-Befehl entspricht: BlitzMax: [AUSKLAPPEN] Import mojo |
||
![]() |
tft |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hallo,
ich würde sagen ..... sogar ich habe das verstanden ......... ist doch aber alles andere als einfach und intuitiv. Wird Monky sich eher an C++ orientieren? Gruss TFT |
||
TFT
https://www.sourcemagic.ch Monkey,HTML5,CSS3,W 10 64 Bit, 32 GB Ram, GTX Titan, W8 ist Müll !!!!!! |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group