C# - 将编号系统应用于列表时出错

时间:2015-11-20 10:49:44

标签: c# list uniqueidentifier

我正在开发一个程序,该程序可以构建并允许使用芯片 - 硬币停车场的模拟。为了建造停车场,我要求用户输入停车场的名称,停车场的楼层数以及每个楼层的停车位数。

这里有几个课程: ParkingSpace(代表单个空格) ParkingSpaces(集合类 - List的公共接口) Level(包含ParkingSpaces实例作为组合关系的一部分) Levels(集合类 - List的公共接口) CarPark(包含'级别'实例作为合成关系的公园)

基本上,停车场包含多个层次,每层都有多个空间。

到目前为止这个工作正常,它们都构造得很好(使用输出测试通知创建了多少级别和空间),但我刚刚尝试实现一个编号系统(给每个空间一个唯一的ID)并遇到有点问题。

carPark有一个属性carParkID,每个LevelID都有LevelID,每个ParkingSpace都有一个SpaceID。在创建停车场时,应通过用户输入分配carParkID,其余部分应使用编号算法进行计算。 每个级别都会获得ID "carParkID-L(level#)",因此级别1为"carParkID-L1",级别2为"carParkID-L2"等。此操作符合预期。 但是,当尝试为级别上的空间分配名称时会出现问题,因为由于某种原因,每个级别上的空格然后采用列表中最高级别的levelID,例如(假设停车场有3个级别): / p>

级别2,空格1应该具有spaceID "carParkID-L2-0001",但最终会得到spaceID "carParkID-L3-0001"。这发生在每个级别上,这意味着每个级别上的第一个空格具有相同的ID,而不是考虑实际的级别数。

对级别和空格进行编号的代码如下所示,我已经逐步完成了它,但除了无法找到问题的根源之外的所有内容。如果您有任何见解,请告诉我们!

    //apply numbering system to all levels in car park
    public void numberLevels(string carParkID)
    {
        //access all instances in collection
        for (int levelIndex = 0; levelIndex < Length(); levelIndex++)
        {
            //assign level at current index to variable
            Level l = At(levelIndex);
            //use formula to create level name
            string levID = carParkID + "-L" + Convert.ToString(levelIndex + 1);

            //apply created ID to level
            l.setLevelID(levID);

            for (int spaceIndex = 0; spaceIndex < l.getNumSpaces(); spaceIndex++)
            {
                //construct new space
                //hold state of instance at current index
                ParkingSpace ps = l.getSpacesOnLevel().At(spaceIndex);

                //const to set consistent ID
                //4 figures, any blanks default to 0
                //1 = 0001
                //123 = 0123
                //length of figure
                const int WIDTH = 4;
                //default number
                const char PADCHAR = '0';

                //extend formula to create space unique ID
                //include car park and level ID
                string psID = levID + "-" + Convert.ToString(spaceIndex + 1).PadLeft(WIDTH, PADCHAR);

                //apply numbering system to space
                ps.setSpaceID(psID);
            }
        }
    }

如果您发现我出错的地方,请告诉我,如果您需要任何嵌套功能澄清,请在评论中回复!

谢谢, 标记

0 个答案:

没有答案