java中的门XOR逻辑

时间:2015-04-10 23:12:24

标签: java

人们...... XOR Gate仍然给我带来了困难。我真的很接近完成它,但有些测试用例失败了。我的规格说如果我有more than two 1(高信号),例如: 11110011111000000,因此输出应为0(低信号)。

否则,如果有任何输入信号是' X'输出也是XXX00111XX100X01,则输出也应为X

否则,如果所有输入信号都已知(没有X信号)并且EXACTLY一个1信号,则输出为1,例如 000001100000110,则输出应为1

注意:所有getter和setter方法都是正确的(已测试)和Signal.HI ==1, Signal.LO = 0 and Signal.X = X。 smb可以用这种方法帮助我吗?当输入信号为011时,当我获得0时输出应为1。其次,当输入为XX时,我应该0 X@Override public boolean propagate() { Signal inputSignal; int countHI = 0; List<Wire> inputs = getInputs(); Signal temp = getOutput().getSignal(); for(int i = 0; i < inputs.size(); i++) { inputSignal = inputs.get(i).getSignal(); if(inputSignal == Signal.X) { getOutput().setSignal(Signal.X); break; } else if(inputSignal == Signal.HI) countHI++; else if(inputSignal == Signal.LO) getOutput().setSignal(Signal.HI); } if(countHI > 2 || countHI == 0) getOutput().setSignal(Signal.LO); 请问请提示我或帮助我吗?提前谢谢!

{{1}}

....................................此问题的进一步不必要的代码

2 个答案:

答案 0 :(得分:2)

以下是发生的事情:

当您检测到X的输入信号时,您将输出设置为X,并且断开循环...但最后的IF语句仍在执行,因此您的输入为“XX”, countHI为零,因此满足最后一个if条件,并且最终通过在代码末尾将其设置为0来覆盖输出信号。中断只会突破当前的循环。

您的代码仅检查最后一个if语句中hiCount是否大于2,但是当有两个或更多1时,您认为它是假的,所以当您恰好有两个1时,您不会输入if条件。

您需要在逻辑上考虑您的解决方案并自行运行,然后您会发现它为什么不能按预期运行。

答案 1 :(得分:1)

这是我如何编码的。请注意,我只在确定它是正确值时才设置信号:在循环之后。

另请注意,我将所有案例互相排斥。

boolean hasX = false;
boolean hiCount = 0;

for (Wire wire : inputs) {
    Signal inputSignal = wire.getSignal();

    if (inputSignal == Signal.X) {
        hasX = true;
        // optimization: break out of the loop early since we know
        // that, whatever the number of HI and LO, if there is one
        // X, the result is X
        break;
    }
    else if (inputSignal == Signal.HI) 
        hiCount++;
    }
}

if (hasX) {
    getOutput().setSignal(Signal.X);
}
else if (hiCount == 1) {
    getOutput().setSignal(Signal.HI);
}
else {
    getOutput().setSignal(Signal.LO);
}