逻辑电路中的AND门

时间:2015-04-10 05:51:39

标签: java

伙计们......我会尽力解释该方法的作用,因为它从其他类中获取了很多成员,但其逻辑应该是直截了当的。 因此,在逻辑电路的AND Gate中,如果任何输入信号是0,那么输出也是0;如果all输入信号为1,则输出也为1;但如果我们有信号0X(unknown signal),则输出为0;在1X时,输出应为X。 我在方法代码中有一个错误,因为当我们说0X信号被输入门时,我得到X而不是0。请问smb请帮帮我?注意:Signal.HI1Signal.LO0Signal.XX。如果需要更多信息,请告诉我。

public boolean propagate() 
    {
        Signal inputSignal;
        Signal outputFinalSignal;
        Signal temp = getOutput().getSignal();

        List<Wire> inputs = getInputs();

        for(int i = 0; i < inputs.size(); i++)
        {
            inputSignal = inputs.get(i).getSignal();
            if(inputSignal == Signal.LO)
            {
                getOutput().setSignal(Signal.LO);
                break;
            }

            else if(inputSignal == Signal.X)
            {
                getOutput().setSignal(Signal.X);
                break;
            }

            else 
            {
                getOutput().setSignal(inputSignal);
            }

        }
        ........................//Unnecessary for this problem code

2 个答案:

答案 0 :(得分:1)

你的逻辑应该是这样的:

Signal result = Signal.HI; // default value is 1
for(int i = 0; i < inputs.size(); i++) {
    inputSignal = inputs.get(i).getSignal();
    if(inputSignal == Signal.LO) {
        // input is 0 - final result is 0 always, break immediately
        result = inputSignal;
        break;
    }
    else if(inputSignal == Signal.X) {
        // input is X, but we could have 0 later, so we store X and continue without break
        result = inputSignal;
    }
    else  {
        // signal is 1, just skip as we could meet 0 or X later or already met X
    }
}
getOutput().setSignal(result);

答案 1 :(得分:-1)

在遇到X后继续迭代,并初始化为HI:

public boolean propagate() 
{
    Signal inputSignal;
    Signal outputFinalSignal = Signal.HI;
    Signal temp = getOutput().getSignal();

    List<Wire> inputs = getInputs();

    for(int i = 0; i < inputs.size(); i++)
    {
        inputSignal = inputs.get(i).getSignal();
        if(inputSignal == Signal.LO)
        {
            getOutput().setSignal(Signal.LO);
            break;
        }

        else if(inputSignal == Signal.X)
        {
            getOutput().setSignal(Signal.X);
        }

    }