Array exeption in two lines...
BlitzMax Forums/BlitzMax Beginners Area/Array exeption in two lines...
| ||
Local earth2:Int[][][] earth2[1][1][1]=1 I get an unhandled exception. whats wrong with it? What should i write instead of this? Edit : i am quite new to blitzmax. |
| ||
Local earth2:int[2][2][2] earth2[1][1][1] = 1 You need to initialize the size of the array before you can use it. |
| ||
Still not working I am getting the Compile Error: Expression of type 'Int' cannot be invoked edit : Local earth2:Int[2,2,2] earth2[1,1,1]=1 is that the only way to do it? |
| ||
You can do what you want, but the initialisation is a bit more complicated. I guess an array initialiser only initialises one array per command. Local earth2:Int[][] earth2=New Int[] [2] For n=0 To 1 earth2[n]=New Int [2] Next earth2[1][1] = 1 DebugLog earth2[1][1] I'll leave it as an exercise for the reader to extrapolate to 3D. I wouldn't bother with arrays of arrays unless you have a specific reason. Multidimensional arrays are less of a headache. |
| ||
Basically, i wanted to see if it was possible to work with arrays without having to set up the size. Arrays of arrays seemed to be a more logical way to do things, but i think multidimentional arrays are easier to use :) Edit, sorry for my bad english, i try to do my best. Edit2: Local earth2:Int[][] earth2=New Int[] [2] For n=0 To 1 earth2[n]=New Int [2] Next earth2[1][1] = 1 DebugLog earth2[1][1] Ok, fully understood how to use array of arrays, i guess there is no way to create arrays without setting up their initial size. |
| ||
I tried to init a multidimentional array a while back but it can't be done. You have to manually do it, sorry. |
| ||
Basically, i wanted to see if it was possible to work with arrays without having to set up the size. It isn't. An Array, by definition, always has a known size. Depending on what you're trying to achieve, try using Lists or Graphs instead. |
| ||
Your help was really apprecied, it allowed me to define things without making the compiler angry. the following is just some training i wanted to do, could allow me to create selfmade strange things :) Just to show you its correctly eaten by the compilater. Global Xindex:Int=0 Global X:Int[][][][] Function createXarray() X=New Int[][][] [10] X[Xindex] = createX(2, 2, 2, 0, 0, 0, 2, 2, 2); X[Xindex] = createX(2, 2, 2, 0, 2, 0, 2, 2, 2); X[Xindex] = createX(2, 2, 2, 0, 0, 0, 2, 2, 2); X[Xindex] = createX(1, 1, 1, 1, 1, 1, 0, 0, 0); X[Xindex] = createX(1, 1, 1, 1, 2, 1, 0, 0, 0); X[Xindex] = createX(1, 1, 1, 1, 1, 1, 0, 0, 0); X[Xindex] = createX(0, 0, 0, 2, 2, 2, 0, 0, 0); X[Xindex] = createX(0, 0, 0, 2, 0, 2, 0, 0, 0); X[Xindex] = createX(0, 0, 0, 2, 2, 2, 0, 0, 0); X[Xindex] = createX(0, 0, 0, 0, 0, 0, 0, 0, 0); End Function Function createX:Int[][][](a:Int, b:Int, c:Int, d:Int, e:Int, f:Int, g:Int, h:Int, i:Int) Local rArray:Int[][][]=New Int[][][4] rArray[0] = [[a,b,c], [d,e,f], [g,h,i]]; rArray[1] = [[d,e,f], [g,h,i], [a,b,c]]; rArray[2] = [[a,b,c], [g,h,i], [d,e,f]]; rArray[3] = [[g,h,i], [d,e,f], [a,b,c]]; Xindex=Xindex+1 Return rArray; End Function |
| ||
you can init a blank multi dimensional array on the run:Global array:Int[,,] array = Createarray(10,10,10) Print array.length array = createarray(20,20,20) Print array.length Function createarray:Int[,,](x:Int, y:Int, z:Int) Return New Int[x,y,z] End Function what you can not do is resize it and keep the data. but I am shure a work around can be easily implemented. |