我正在开发一个程序,该程序可以构建并允许使用芯片 - 硬币停车场的模拟。为了建造停车场,我要求用户输入停车场的名称,停车场的楼层数以及每个楼层的停车位数。
这里有几个课程:
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);
}
}
}
如果您发现我出错的地方,请告诉我,如果您需要任何嵌套功能澄清,请在评论中回复!
谢谢, 标记