嵌套循环不迭代

时间:2013-05-01 15:27:59

标签: c# visual-studio-2010 windows-phone-7 loops xna

在我的代码中,我有一个嵌套循环,它不会迭代,除了if语句外,无论条件如何都会发生。如果没有if语句,迭代循环的for循环代码部分将变得无法访问。无论我尝试过什么,我都无法让内循环迭代。

    class Map
    {
        public int Width { get; set; }
        public int Height { get; set; }
        public Vector2[] positions = new Vector2[500*500];

        private GroundVoxel[,] map = new GroundVoxel[500, 500];
        private Vector2 voxelPosition = new Vector2(0,0);
        private static int sizeX = 499, sizeY = 499, airLevel = 425;
        private int positionX = 0, positionY = 0, vectorNumber = 0;

        public Map()
        {
        }
        public Vector2[] Initialize()
        {
            for (int i = 0; i <= sizeY; i++)
            {
                for (int j = 0; j <= sizeX; j++) <-- This does not iterate.
                {
                    map[positionX, positionY] = new GroundVoxel(voxelPosition);
                    voxelPosition.X += 80;
                    positions[vectorNumber] = voxelPosition;
                    vectorNumber += 1;
                    if (j == sizeX) <-- This always executes even though j != sizeX.
                    {
                        break;
                    }
                }
                voxelPosition.Y += 80;
                voxelPosition.X = 0;
            }
            return positions;
        }
    }
}

2 个答案:

答案 0 :(得分:1)

您必须使用完全限定名称来引用静态类成员变量,例如sizeXsizeY
Here是关于此主题的文章。< / p>

希望这有帮助!

答案 1 :(得分:0)

我认为我们需要更多代码。我已将您的代码复制到基本的winforms测试应用程序中,并且我的两个循环都按预期迭代。

我不熟悉XNA或“VoxelPosition”是什么,但我认为你有一个潜伏的错误:

voxelPosition.X += 80;
positions[vectorNumber] = voxelPosition;

您只是将相同的指针存储在一个非常大的数组中 - 所有条目都将指向同一个对象。

每次循环都需要声明另一个对象来存储单个矢量条目。

希望这有帮助吗?