Java - 确定事件序列 - AB或BA

时间:2014-05-22 08:45:34

标签: java sequence

这个可能听起来很琐碎,但我无法找到合适的解决方案。请求帮助。

问题:在我的代码中,我在一个序列中得到了2个事件(一个接一个)。序列可以是“事件A”,然后是“事件B”,反之亦然。如果我的事件序列是AB,那么我需要采取一些行动,同样如果我的序列是BA,那么我需要采取另一个行动。 但是,我发现很难确定序列并设置一个布尔值。 我想到的一个解决方案是使用堆栈。这两个事件都将被推送到堆栈。我将检查我的堆栈大小是否为2,然后我将弹出最后一个值并查看它是哪个事件。如果它是A,那么我将为BA添加逻辑,如果它是B,那么我将为AB添加逻辑。一旦完成,我将清除我的堆栈。

有更简单的方法吗?请建议

3 个答案:

答案 0 :(得分:1)

如果它是Synchronous并且您只能将这些用于可能性,那么您只需要一个布尔值(hasOtherArrived)来执行此操作:

当Event到达时,检查hasOtherArrived是否为真:如果是执行所需的代码(取决于到达的事件)并将hasOtherArrived设置为false。否则将hasOtherArrived设置为true。

AB的一个小模式(BA案例类似) enter image description here

答案 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)

因为,我不确切地知道你是如何得到你的输入或用例的,所以我不清楚什么对你有好处。这就是我在想的:

  1. 您可以使用queue代替堆叠。由于queue遵循FIFO样式First In First Out。因此,无需像Stack

  2. 中所考虑的那样颠倒选择
  3. 如果您确定只有两个选项,那么您可以定义两个变量。例如choice1choice2,其中第一个输入存储在choice1中,第二个输入存储在choice2中。

  4. 注意:如果有多个选项,此解决方案将无效。