这一次,我有NAND Gate和NOR Gate,在这两个测试中,我只有一个测试失败。在NAND中,假设输入信号是0X,(LOW and UNKNOWN SIGNAL),输出应该是1,但我得到的是X。在NOR中,当我有1 (HI信号)和X (未知信号)的混合时,答案应该是0,但我得到的X Im只有一个涉及0和X的测试用例失败,并且它们通过NAN的输出应该是1。在这个方法中,当我检查Signal.X时,boolean变成了true,但是它会从循环中中断吗?
Table NAND for reference.(NOTE:table does not contain X)
Input A Input B Output Q
0 0 1
0 1 1
1 0 1
1 1 0
Table NOR for reference.(NOTE:table does not contain X)
Input A Input B Output Q
0 0 1
0 1 0
1 0 0
1 1 0
//in NAND propagate when the inputs are 0X or 000X0X the output should be 1, Im //getting X
public boolean propagate() //NAND method
{
Signal inputSignal;
Signal temp = getOutput().getSignal();
List<Wire> inputs = getInputs();
boolean hasX = false;
int countLO = 0;
int countHI = 0;
for(Wire wire: inputs)
{
inputSignal = wire.getSignal();
if(inputSignal == Signal.X)
hasX = true;
else if(inputSignal == Signal.LO)
countLO++;
else if(inputSignal == Signal.HI)
countHI++;
}
if(hasX)
getOutput().setSignal(Signal.X);
else if(countLO == inputs.size())
getOutput().setSignal(Signal.HI);
else if(countHI == inputs.size())
getOutput().setSignal(Signal.LO);
else
getOutput().setSignal(Signal.HI);
.................................
//in NOR propagate when the inputs are 1X1X or 1X the output should be X, Im //getting X
public boolean propagate() //NOR method
{
Signal inputSignal;
int countLO = 0;
boolean hasX = false;
List<Wire> inputs = getInputs();
Signal temp = getOutput().getSignal();
for(Wire wire: inputs)
{
inputSignal = wire.getSignal();
if(inputSignal == Signal.X)
{
hasX = true;
break;
}
else if(inputSignal == Signal.LO)
countLO++;
}
if(hasX)
getOutput().setSignal(Signal.X);
else if(countLO != inputs.size())
getOutput().setSignal(Signal.LO);
else getOutput().setSignal(Signal.HI);发布于 2015-04-11 09:13:47
您的表应该包括X,这样我们就可以看到程序应该做什么。不管怎么说,问题似乎出在if(hasX) getOutput().setSignal(Signal.X);这一行。因为这是嵌套的if语句中的第一行,所以它的优先级高于其他任何语句。因此,如果输入中有任何X,就会调用getOutput().setSignal(Signal.X)。
https://stackoverflow.com/questions/29572802
复制相似问题