Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/fsharp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 电路中的逻辑门_Java_Arraylist_Enums - Fatal编程技术网

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,则为真
然后循环输入,并根据当前元素的值设置一个变量。如果值更新后hasX为true,则可以中断循环:结果为X。否则,继续


循环结束后,如果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