船舶泊位数组存储问题求助:等待列表仅能添加一艘船即提示已满
排查船舶等待列表仅能添加一艘船的问题
嘿,我来帮你梳理下这个问题的常见排查方向——毕竟只能加一艘船就提示等待列表满,大概率是waitingList()方法里的逻辑或者等待列表的存储结构出了问题:
1. 等待列表的存储结构初始化错误
首先检查你的等待列表是怎么定义的:
- 如果用的是固定长度数组,比如
Ship[] waitingList = new Ship[1];,那数组本身容量只有1,自然只能装一艘船就满了。得把数组长度改成你预期的最大等待数量,比如new Ship[10]。 - 如果用的是
ArrayList这类动态集合,有没有在waitingList()方法里每次调用都重新初始化?比如方法内写List<Ship> waitingList = new ArrayList<>();,那每次调用这个方法都会创建一个新的空列表,之前添加的船会直接丢失,而且如果你的满状态判断逻辑写得有问题,就会出现“只能加一艘”的错觉。
2. 满状态判断逻辑出错
这是最常见的问题点,仔细检查你判断等待列表是否已满的代码:
- 是不是把判断条件写成了
if (waitingList.size() >= 1)?这种情况下只要列表里有一艘船,就会提示已满,完全不符合你的预期。应该改成和预设的最大等待容量比较,比如if (waitingList.size() >= MAX_WAITING_SHIPS),其中MAX_WAITING_SHIPS是你定义的常量(比如10)。 - 如果是用数组+计数变量的方式(比如
int currentWaitingCount),检查这个计数变量的更新逻辑:添加船舶后有没有执行currentWaitingCount++?或者初始化的时候是不是设成了1而不是0?
3. waitingList()方法的逻辑流程问题
- 有没有可能等待列表是方法的局部变量?比如每次调用
waitingList()都在方法内部创建列表实例,那之前添加的船舶根本没被持久化保存,看起来每次只能加一艘(实际是每次都是新列表)。这种情况要把等待列表改成类的成员变量,让它在类的生命周期内一直存在。 - 检查添加船舶后的逻辑:是不是添加后不小心触发了“满状态”的提示?比如分支判断写反了,比如
if (waitingList.size() < MAX_SIZE) { 添加 } else { 提示满 }写成了if (waitingList.size() > MAX_SIZE) { 添加 } else { 提示满 }。
如果可以的话,把waitingList()方法的完整代码贴出来,我能更精准地帮你定位问题。不过先按照上面的点自查,应该能找到问题所在~
内容的提问来源于stack exchange,提问作者S.smith94
相关产品推荐
相关产品推荐

