more than two
1
(高信号),例如:
111100
或111
或11
或00
或0000
,因此输出应为0
(低信号)。
否则,如果有任何输入信号是' X'输出也是X
等
XX00111
或XX10
或0X01
,则输出也应为X
否则,如果所有输入信号都已知(没有X
信号)并且EXACTLY
一个1
信号,则输出为1
,例如
000001
或10000
或01
或10
,则输出应为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}}
....................................此问题的进一步不必要的代码
答案 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);
}