Java 电路中的逻辑门
因此,在逻辑电路的异或门中:Java 电路中的逻辑门,java,arraylist,enums,Java,Arraylist,Enums,因此,在逻辑电路的异或门中: 如果所有输入信号均为0或1,则输出为0 如果输入信号为混合信号,如1110001111,则输出为1 但是 如果我们有信号0和X(未知信号),那么输出是X 当1和X时,输出应为X 我在方法的代码中有一个错误,因为当我们假设11111 00001信号被送入门时,我得到的是0而不是1。如果输入是0000000或11111,我应该如何处理?注:Signal.HI为1,Signal.LO为0,Signal.X为X 如果需要更多信息,请告诉我 @Override pub
- 如果
输入信号均为所有
或0
,则输出为1
李>0
- 如果输入信号为混合信号,如
,则输出为1110001111
李>1
- 如果我们有信号
和0
(未知信号),那么输出是X
李>X
- 当
和1
时,输出应为X
李>X
11111 00001
信号被送入门时,我得到的是0
而不是1
。如果输入是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;
tempSignal = inputs.get(1).getSignal();
for(int i = 0; i < inputs.size(); i++)
{
inputSignal = inputs.get(i).getSignal();
//tempSignal = inputs.get(0).getSignal();
if(inputSignal != tempSignal)
getOutput().setSignal(Signal.HI);
else 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);
.............................................
@覆盖
公共布尔传播()
{
信号输入信号;
信号温度信号;
信号温度=getOutput().getSignal();
列表输入=getInputs();
信号结果=Signal.LO;
tempSignal=inputs.get(1.getSignal();
对于(int i=0;i
我将使用3个布尔变量:
- hasX:如果满足X,则为true
- hasLO:如果满足LO,则为true
- hasHI:如果遇到HI,则为真
循环结束后,如果hasLO和hasHI都为真,则返回1。否则,返回0。这样可能更简单一些:
public Signal propagate() {
Signal inputSignal;
Signal tempSignal;
Signal temp = getOutput().getSignal();
List<Wire> inputs = getInputs();
Signal result = Signal.LO;
tempSignal = inputs.get(1).getSignal();
//count number of HI, LO and X-Inputs
int hi = 0;
int lo = 0;
int x = 0;
for(Signal s : inputs)
switch(s){
case Signal.HI:
hi += 1;
break;
case Signal.LO:
lo += 1;
break
}
x = inputs.size() - (hi + lo);
if(x == 0)
if((hi % 2) == 1)//XOR is HI for an uneven number of HI inputs
return Signal.HI;
else
return Signal.LO;
else
return Signal.X;//atleast one x -> unknown result
}
公共信号传播(){
信号输入信号;
信号温度信号;
信号温度=getOutput().getSignal();
列表输入=getInputs();
信号结果=Signal.LO;
tempSignal=inputs.get(1.getSignal();
//计算HI、LO和X输入的数量
inthi=0;
int-lo=0;
int x=0;
用于(信号s:输入)
开关{
case Signal.HI:
hi+=1;
打破
case Signal.LO:
lo+=1;
打破
}
x=输入。大小()-(高+低);
如果(x==0)
如果((hi%2)==1)//XOR对于数量不均匀的hi输入为hi
返回信号.HI;
其他的
返回信号。LO;
其他的
返回信号.X;//至少一个X->未知结果
}
虽然我没有完全理解您对XOR的定义,但它可能会有所帮助。在执行
if(inputSignal==Signal.X)
之前,您应该先检查if(inputSignal!=tempSignal)
是Signal
一个枚举吗?为什么您要专门比较第二个输入线(inputs.get(1.getSignal())此外,您对XOR的定义似乎有点不正确。如果是X和0,那么是X。如果是X和1,那么不是X。您必须对If
语句重新排序。如果前一个值不是X
,下一个值是X
,那么您的第一个条件inputSignal!=tempSignal
是true
,而其他条件则从不检查。您必须先检查X
,然后再检查!=
(当inputSignal!=tempSignal
的计算结果为false
时,您不需要再次检查,inputSignal==tempSignal
…哦,而且您的定义缺少X
和X
大小写的规范…是的,信号是enum。我的规范说,如果1X=X和0X=X感谢reply!你能不能只给我看一个?@JBNizet