这个可能听起来很琐碎,但我无法找到合适的解决方案。请求帮助。
问题:在我的代码中,我在一个序列中得到了2个事件(一个接一个)。序列可以是“事件A”,然后是“事件B”,反之亦然。如果我的事件序列是AB,那么我需要采取一些行动,同样如果我的序列是BA,那么我需要采取另一个行动。 但是,我发现很难确定序列并设置一个布尔值。 我想到的一个解决方案是使用堆栈。这两个事件都将被推送到堆栈。我将检查我的堆栈大小是否为2,然后我将弹出最后一个值并查看它是哪个事件。如果它是A,那么我将为BA添加逻辑,如果它是B,那么我将为AB添加逻辑。一旦完成,我将清除我的堆栈。
有更简单的方法吗?请建议
答案 0 :(得分:1)
如果它是Synchronous并且您只能将这些用于可能性,那么您只需要一个布尔值(hasOtherArrived)来执行此操作:
当Event到达时,检查hasOtherArrived是否为真:如果是执行所需的代码(取决于到达的事件)并将hasOtherArrived设置为false。否则将hasOtherArrived设置为true。
AB的一个小模式(BA案例类似)
答案 1 :(得分:0)
使用计数器。设置其值= 2;
1. in onreceiveEventA : decerement the counter
if(counter==0){
// you know that event sequence is BA
}
2. in onreceiveEventB :decrement the counter
if(counter==0){
// you know that event sequence is AB
}
答案 2 :(得分:0)
因为,我不确切地知道你是如何得到你的输入或用例的,所以我不清楚什么对你有好处。这就是我在想的:
您可以使用queue
代替堆叠。由于queue
遵循FIFO
样式First In First Out
。因此,无需像Stack
如果您确定只有两个选项,那么您可以定义两个变量。例如choice1
和choice2
,其中第一个输入存储在choice1
中,第二个输入存储在choice2
中。
注意:如果有多个选项,此解决方案将无效。