如何在JAVA中实现XOR逻辑
伙计们。。。接近我前面的问题。所以,在逻辑电路的异或门中,如果所有的输入信号都是0或1,那么输出是0;如果输入信号为混合信号,如1110001111,则输出为1;但是如果我们有信号0和Xunknown信号,那么输出是x;当1和X时,那么输出应该是X。我在方法代码中有一个错误,因为当11111 00001信号输入到门中时,我得到的是0而不是1。smb能帮我吗?如果输入是0000000或11111,我应该如何处理?注意:Signal.HI是1,Signal.LO是0,Signal.X是X。如果需要更多信息,请告诉我如何在JAVA中实现XOR逻辑,java,Java,伙计们。。。接近我前面的问题。所以,在逻辑电路的异或门中,如果所有的输入信号都是0或1,那么输出是0;如果输入信号为混合信号,如1110001111,则输出为1;但是如果我们有信号0和Xunknown信号,那么输出是x;当1和X时,那么输出应该是X。我在方法代码中有一个错误,因为当11111 00001信号输入到门中时,我得到的是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);
.............................................
检查您的“循环”。您正在为扫描的每个数字提供输出。但我从你的问题细节中得到的是,在扫描所有信号之后,你想要一个单一的输出
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);
你应该在逻辑上有条理。我会这样制定解决方案: 有一个作为输入的信号列表。您必须检查每个信号的值,并建立迄今为止已处理的信号的汇总中间结果。 在所有情况下,过程必须到达输入端,但当已经存在一个或多个HI和一个或多个LO时。只有在这种情况下,我们才知道输出。 只需3个布尔值即可轻松设计摘要,这些布尔值保存已处理的信号类型 我保留了您提供的不同类方法,但对于信号,我定义了一个枚举,它似乎是一个很好的案例,并允许使用开关/案例: 传播方法可以类似于:
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]->LO
[嗨,嗨,嗨]->LO
[LO,HI,HI]>HI
[嗨,X,嗨]->X
[LO,LO,X]->X
[X,X,X]->LO
逻辑很简单。ifinput==输出返回0;否则返回1@尼古拉:为什么你认为你现在的代码应该有效?只是想知道你的思维过程,110应该输出1吗?如果您的描述是准确的,那么它应该是正确的,即使11个输出为0。如果您只有一个X列表,结果应该是LO?
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();
}