0

我有两个 for 循环,我想将这些数据保存在一个数组中。第一个 for 循环将在数组中创建 5 个矩形。之后,第二个 for 循环将创建 5 个矩形并将它们添加到数组中。但是有些东西不起作用。我在代码的最后一行收到“索引超出数组范围”错误消​​息,我不知道要更改什么。

int framewidth = texture.Width / sourceRects.Length; 
int frameheight = texture.Height; 

private void vorrück(Rectangle[] sourceRects, int framewidth, int frameheight) 
    { 
        int doublelenght = sourceRects.Length * 2; 
        for (int i = 0; i < sourceRects.Length; i++) 
            sourceRects[i] = new Rectangle(i * framewidth, 0, framewidth, frameheight); 
        for (int normallenght = sourceRects.Length; normallenght < doublelenght; normallenght++) 
            sourceRects[normallenght] = new Rectangle((sourceRects.Length - 1 - normallenght) * framewidth, 0, framewidth, frameheight);      
    }
4

3 回答 3

1

您会收到此错误,因为 Rectangle[] 数组的大小小于 10。请记住,当您声明 Rectangle[] 数组时,您至少应该将其声明为 10。

Rectangle[] sourceRects = new Rectangle[10]; //(it will be from 0 to 9)

然后,您将能够向其添加 10 个矩形。

于 2012-09-15T15:34:48.670 回答
0

你需要一个更大的数组。

第二个循环非常清楚地写在边界之外,相关细节是:

for (int normallenght = sourceRects.Length; ...; ...) 
        sourceRects[normallenght] = ...;  //  normallenght >= sourceRects.Length

作为一般解决方案,不要过多地使用数组。在这种情况下,aList<Rectangle>可能是首选的数据结构。

于 2012-09-15T15:34:37.290 回答
0

您犯了 2 个错误(缺少调整大小和第二个错误)。看我修改后的代码:

    private void vorrück(ref Rectangle[] sourceRects, int framewidth, int frameheight)
    {
        int doublelenght = sourceRects.Length * 2;     
        for (int i = 0; i < sourceRects.Length; i++)
        { 
            sourceRects[i] = new Rectangle(i * framewidth, 0, framewidth, frameheight);
        }
        Array.Resize(ref sourceRects, doublelenght); 
        for (int normallenght = sourceRects.Length /2; normallenght < doublelenght; normallenght++)
        {
            sourceRects[normallenght] = new Rectangle((sourceRects.Length - 1 - normallenght) * framewidth, 0, framewidth, frameheight);
        }
    }

此代码将调整大小并填充您的 sourceRects 数组。

您可以像这样使用此代码:

        Rectangle[] sourceRects = new Rectangle[2];
        vorrück(ref sourceRects,5,4);
于 2012-09-15T15:45:16.393 回答