简体   繁体   中英

Index out of range for multi dimensional array

I'm getting the error that the index for my array is out of range. I define a 3D array like this:

Button[, ,] posAr_ItemManager = new Button[maxRows, maxColumns, maxCategories];

Where maxRows, maxColumns and maxCategories are all constant integers. I then want to loop through this whole array, i do it using nested loops as shown here:

for (int i = 0; i < posAr_ItemManager.GetLength(0); i++)
        {
            for (int j = 0; i < posAr_ItemManager.GetLength(1); j++)
            {
                for (int z = 0; i < posAr_ItemManager.GetLength(2); z++)
                {
                    if (posAr_ItemManager[i,j,z] != null)
                    {
                        Button but = posAr_ItemManager[i, j, z];
                        but.Width = itemWidth;
                        but.Height = itemHeight;
                        but.SetValue(Canvas.LeftProperty, itemPanelX + (i + 1) * butSpacing + i * itemWidth);
                        but.SetValue(Canvas.TopProperty, itemPanelY + (i+1)*butSpacing + i* itemHeight);
                    }
                }
            }
        }

When I run the program it gives the out of range error where I check if the item is not equal to null.

I have no idea why it does it as I thought my declaration of the 3D array is correct and the nested loop as well? thanks in advance!

You're using " i " to check if the loop is over in each of the dimensions. Change it to corresponded i,j,z.


for (int i = 0; i < posAr_ItemManager.GetLength(0); i++)
        {
            for (int j = 0; **j** < posAr_ItemManager.GetLength(1); j++)
            {
                for (int z = 0; **z** < posAr_ItemManager.GetLength(2); z++)

for (int i = 0; i < posAr_ItemManager.GetLength(0); i++)
{
    for (int j = 0; j < posAr_ItemManager.GetLength(1); j++)
    {
        for (int z = 0; z < posAr_ItemManager.GetLength(2); z++)

look very carefully at the middle tests. Also, consider hoisting the GetLength tests so you only do them once per dimension. Perhaps:

int rows = posAr_ItemManager.GetLength(0), columns = posAr_ItemManager.GetLength(1),
    categories = posAr_ItemManager.GetLength(2);

for (int row = 0; row < rows; row++)
{
    for (int col = 0; col < columns; col++)
    {
        for (int cat = 0; cat < categories; cat++)

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM