伙计们......我会尽力解释该方法的作用,因为它从其他类中获取了很多成员,但其逻辑应该是直截了当的。
因此,在逻辑电路的AND Gate
中,如果任何输入信号是0
,那么输出也是0
;如果all
输入信号为1
,则输出也为1
;但如果我们有信号0
和X(unknown signal)
,则输出为0
;在1
和X
时,输出应为X
。
我在方法代码中有一个错误,因为当我们说0X
信号被输入门时,我得到X
而不是0
。请问smb请帮帮我?注意:Signal.HI
为1
,Signal.LO
为0
,Signal.X
为X
。如果需要更多信息,请告诉我。
public boolean propagate()
{
Signal inputSignal;
Signal outputFinalSignal;
Signal temp = getOutput().getSignal();
List<Wire> inputs = getInputs();
for(int i = 0; i < inputs.size(); i++)
{
inputSignal = inputs.get(i).getSignal();
if(inputSignal == Signal.LO)
{
getOutput().setSignal(Signal.LO);
break;
}
else if(inputSignal == Signal.X)
{
getOutput().setSignal(Signal.X);
break;
}
else
{
getOutput().setSignal(inputSignal);
}
}
........................//Unnecessary for this problem code
答案 0 :(得分:1)
你的逻辑应该是这样的:
Signal result = Signal.HI; // default value is 1
for(int i = 0; i < inputs.size(); i++) {
inputSignal = inputs.get(i).getSignal();
if(inputSignal == Signal.LO) {
// input is 0 - final result is 0 always, break immediately
result = inputSignal;
break;
}
else if(inputSignal == Signal.X) {
// input is X, but we could have 0 later, so we store X and continue without break
result = inputSignal;
}
else {
// signal is 1, just skip as we could meet 0 or X later or already met X
}
}
getOutput().setSignal(result);
答案 1 :(得分:-1)
在遇到X后继续迭代,并初始化为HI:
public boolean propagate()
{
Signal inputSignal;
Signal outputFinalSignal = Signal.HI;
Signal temp = getOutput().getSignal();
List<Wire> inputs = getInputs();
for(int i = 0; i < inputs.size(); i++)
{
inputSignal = inputs.get(i).getSignal();
if(inputSignal == Signal.LO)
{
getOutput().setSignal(Signal.LO);
break;
}
else if(inputSignal == Signal.X)
{
getOutput().setSignal(Signal.X);
}
}