伙计们...接近我之前提出的问题。因此,在XOR Gate
逻辑电路中,如果all
输入信号为0
或1
,则输出为0
;如果输入的信号是混合的,例如1110001111
,则输出为1
;但如果我们有信号0
和X
(未知信号),则输出为x;在1
和X
时,输出应为X
。我在方法代码中有一个错误,因为当我们在门中输入1111100001
信号时,我得到0
而不是1
。请问smb请帮帮我?如果输入为0000000
或11111
,我该如何处理?注意:Signal.HI
为1
,Signal.LO
为0
,Signal.X
为X
。如果需要更多信息,请告诉我。
@Override
public boolean propagate()
{
Signal inputSignal;
Signal tempSignal;
Signal temp = getOutput().getSignal();
List<Wire> inputs = getInputs();
Signal result = Signal.LO;
for(int i = 1; i < inputs.size(); i++)
{
inputSignal = inputs.get(i).getSignal();
tempSignal = inputs.get(0).getSignal();
if(inputSignal == tempSignal)
getOutput().setSignal(result);
/*else if((inputSignal == Signal.LO) && (tempSignal == Signal.LO))
getOutput().setSignal(result);*/
else if(inputSignal == Signal.X)
{
result = inputSignal;
getOutput().setSignal(result);
break;
}
else
getOutput().setSignal(Signal.HI);
.............................................
答案 0 :(得分:0)
检查你的循环&#39;。您为扫描的每个数字提供输出。但是我从你的问题细节得到的结果是,在扫描所有信号之后你需要一个输出。
Signal result = Signal.LO;
tempSignal = inputs.get(0).getSignal();
for(int i = 1; i < inputs.size(); i++)
{
inputSignal = inputs.get(i).getSignal();
if(inputSignal != tempSignal)
{
result = Signal.HI;
break;
}
else if(inputSignal == Signal.X)
{
result = inputSignal;
break;
}
}
getOutput().setSignal(result);
答案 1 :(得分:0)
你应该系统化逻辑。我会像这样制定解决方案:
有一个Signal
列表作为输入。您必须检查每个Signal
的值并构建到目前为止已处理Signal
的摘要(中间结果)。
在所有情况下,过程必须到达输入的末尾,但是当已经有一个(或多个)HI和一个(或多个)LO时。仅在这种情况下,我们知道输出
只需3个boolean
值即可轻松设计摘要,其中包含哪种Signal
已被处理。
我保留了您提供的不同类方法,但对于Signal
,我定义了一个enum
这似乎是一个很好的案例并允许使用switch/case
:
enum Signal {
LO(0), HI(1), X(-1);
private int value;
private Signal(int i) {
this.value = i;
}
public int getValue() { return value; }
}
propagate()
方法可以是:
public boolean propagate() {
// Summary
boolean lo = false;
boolean hi = false;
boolean x = false;
Iterator<Wire> iw = getInputs().iterator();
// loop on wires. Stop if there is a LO and a HI
while (iw.hasNext() && !(lo && hi)) {
final Wire w = iw.next();
switch (w.getSignal()) {
case HI:
hi = true;
break;
case LO:
lo = true;
break;
case X:
x = true;
break;
}
}
// Set the output
if (hi && lo) {
getOutput().setSignal(Signal.HI);
}
else if (!lo && hi && x || lo && !hi && x) {
getOutput().setSignal(Signal.X);
}
else {
getOutput().setSignal(Signal.LO);
}
// return true if all wires were checked
return !iw.hasNext();
}
使用上述方法,结果如下:
[LO,LO,LO] - &gt; LO
[HI,HI,HI] - &gt; LO
[LO,HI,HI] - &gt; HI
[HI,X,HI] - &gt; X
[LO,LO,X] - &gt; X
[X,X,X] - &gt; LO