我做了一个小系统,它需要一个座位数来填满电影院一定数量的座位(没有排)。现在我做了一个填充座位并返回地图的方法,地图返回在什么位置有一定数量的座位是空闲的(例如3-2意味着从位置3开始有两个相邻的座位)。
这很有效,但如果我说最多有5个座位,而座位5是免费的,那么该方法不会将其返回到地图。
以下是使用的代码:
对象座椅
public class Seat {
public Integer availability;
public Integer seatNumber;
public boolean IsFree() {
if(availability == 0){
return true;
}
else return false;
}
public String toString() {
return "{ " + seatNumber + ", free: " + IsFree() + " } ";
}
}
此方法创建一个LinkedList,并通过giveRandomAvailability()方法使用“1”(已获取)或“0”(可用)填充可用性
static LinkedList fillList(int seats){
LinkedList<Seat> list = new LinkedList<Seat>();
seats = seatCount;
for(int i = 0; i < seats; i++){
Seat seat = new Seat();
seat.availability = giveRandomAvailability();
seat.seatNumber = (i + 1);
list.add(seat);
}
return list;
}
这是一种不能正常工作的方法,它应该用可用的座位填充地图,但当最后一个元素可用时,它不会映射。以下是一个示例输出:
[{ 1, free: true } , { 2, free: true } , { 3, free: false } , { 4, free: true } , { 5, free: true } ]
{1=2}
您可以看到,第一部分处理得很好,但它还应该包含4=2。
方法:
static Map fillSeats(){
int n = 3;
LinkedList<Seat> newList = fillList(seatCount);
int consecutiveLength = 0; // Consecutive free seats length
int index = 0;
int startIndex = -1; // Store the start of consecutive free seats
System.out.println(newList.toString());
Map<Integer, Integer> consecutiveMap = new HashMap<>(); // Store startIndex -> length
for (Seat seat : newList) {
if (seat.IsFree()) {
if (startIndex < 0) {
startIndex = index;
}
consecutiveLength ++;
} else {
consecutiveMap.put(startIndex + 1, consecutiveLength);
if (consecutiveLength == n) {
// Found, do something here
}
// Reset
startIndex = -1;
consecutiveLength = 0;
}
index++;
}
return consecutiveMap;
}
我在这里找不到问题,非常感谢您的帮助。
您对连续映射的调用。put只存在于循环的else子句中,并且由于列表中的最后一个元素是自由的,因此该代码永远不会在最后两个席位上执行。
座位。IsFree()==true
,增量计数器座位。IsFree()==true
,增量计数器seat.isFree()==false
,为映射加值,重置计数器seat.isFree()==true
,增量计数器seat.isFree()==true
,增量计数器然后循环终止,因此最终计数器不会添加到映射中。
嗯,如果最后一组连续座位包含列表的最后一个元素,那么循环不会添加该组连续座位。您应该在循环后添加逻辑以添加最后一个组:
for (Seat seat : newList) {
if (seat.IsFree()) {
if (startIndex < 0) {
startIndex = index;
}
consecutiveLength ++;
} else {
consecutiveMap.put(startIndex + 1, consecutiveLength);
if (consecutiveLength == n) {
// Found, do something here
}
// Reset
startIndex = -1;
consecutiveLength = 0;
}
index++;
}
// added logic:
if (startIndex >= 0) {
consecutiveMap.put(startIndex + 1, consecutiveLength);
}
return consecutiveMap;
问题内容: 我有这种方法,可以在登录前检查用户名和密码。现在,我的for循环仅检查第一个项目,它发现第一个项目不满足第一个条件,因此与其去检查第二个项目,它只是中断并返回null。 为什么会这样? 这是我的方法: 问题答案: 因此,请尝试此代码。
问题内容: 我发布此消息是因为该主题刚刚在另一个问题/答案中提出,并且该行为没有得到很好的记录。 考虑数据框 我想获取由column定义的每个组的第一行和最后一行。 我试过了 但是,这并没有给我我所期望的。 如何获得每个组中的实际第一个和最后一个值? 问题答案: 一种选择是使用该方法: 但是,我还没有找到一种将它们整齐地聚合的方法。当然,总是可以使用构造函数: 注意:我明确使用了该属性,否则您必须
当单击的elemenet是父元素的最后一个子元素时,我要显示报警。我的HTML结构: 在本例中,我希望在单击该元素(父行的最后一个元素)时显示报警: 我知道我可以使用这样的somethink获得最后一个元素(但我不能在我的例子中使用这个): 我想试着做这样的事,但每次都是假的
我是Java初学者,目前正在完成有关DSA的Udemy课程。我正在学习链表,并且正在研究在链表中插入和删除节点的方法。 从我所学到的到目前为止,我知道我们使用条件来检查链接列表是否是空的。 如果条件为true,则LinkedList为空,否则它不为空。 然而,我们不应该检查是否,因为尾巴将始终引用LinkedList中的最后一个节点,即使我们使? 这是我的密码:
问题内容: 我想知道对for循环中的最后一个元素进行特殊处理的最佳方法(更紧凑和“ pythonic”的方法)。有一段代码只应 在 元素 之间 调用,而在最后一个代码中被禁止。 这是我目前的操作方式: 有什么更好的办法吗? 注意:我不希望使用hack之类的东西。 问题答案: 在大多数情况下,使第 一个 迭代成为特殊情况而不是最后一个案例更容易(且更便宜): 这将适用于任何迭代过程,即使对于那些没有
py代码如下: 参考py写的node.js代码如下 node.js 的解密参数全是和py的一样,打印出来的key也是一样的,说明makeKey方法是一样的, 就是接下来的rc4解密,不知道是我node.js哪里写的不对,最后解密出来的verifierHash和 hash 不一样,求大神解答下,是不是node.js这里的rc4解密有问题导致的,还是哪里有问题?