列表中方法的组合

时间:2015-04-06 22:22:51

标签: java

Gate课程中,我的方法public List<Signal> inspect(List<Signal> inputs)应包含feed()propagate()read()的组合。这是我完成但却收到错误的唯一方法。请问smb请帮帮我这个方法?注意:propagate()是抽象的,由Gate类的子类覆盖。方法public List<Signal> inspect(List<Signal> inputs)应合并feed()propagate()read()

import java.util。*;

public abstract class Gate implements Logic {

    private List<Wire> inputs;
    private Wire output;
    private String name;

    public Gate(String name, List<Wire> ins, Wire out)
    {
        this.name = name;
        this.output = out;

        if(ins.size() == 0 || ins.isEmpty())
            throw new ExceptionLogicParameters(false, 1, 0);
        else 
            this.inputs = ins;
    }

    @Override
    public void feed(List<Signal> inSigs)
    {
        if(inSigs.size() != inputs.size())
            throw new ExceptionLogicParameters(false, inputs.size(), inSigs.size());
        else
        {
            for(int i = 0; i < inSigs.size(); i++)
            {
                inputs.get(i).setSignal(inSigs.get(i));
            }
        }

    }

    @Override
    public void feed(String name)
    {
        if(!(this.name.equals(name)))
                throw new ExceptionLogicMalformedSignal(name.charAt(0), "Invalid logic input");
        else
        {
            Signal signalValue = Signal.fromString(name.charAt(0));
        }

    }

    @Override
    public List<Signal> read()
    {
        List<Signal> signals = new ArrayList<>();
        signals.add(output.getSignal());

        return signals;
    }

    @Override
    public abstract boolean propagate();

    @Override
    public List<Signal> inspect(List<Signal> inputs)
    {
        List<Signal> allMethods = new ArrayList<>();
        allMethods.add(this.feed(inputs));
        allMethods.add(this.propagate());
        allMethods.add(this.read());

    }

    @Override
    public String toString()
    {
        return this.name+"( " + inputs.toString() + " | " + output.toString() + " )";
    }

    @Override
    public boolean equals(Object other)
    {
        if(other instanceof Gate)
        {
            Gate someGate = (Gate)other;
            return (this.inputs == someGate.inputs) && (this.output.equals(someGate.output)
                    && (this.name.equals(someGate.name)));
        }
        else 
            return false;
    }
}

1 个答案:

答案 0 :(得分:1)

您的所有方法都没有返回类型。

当你这样做时

    allMethods.add(this.feed(inputs));
    allMethods.add(this.propagate());
    allMethods.add(this.read());

它不会返回任何内容,因此没有任何内容添加到列表中会引发错误。

listsignal的{​​{1}}

List<Signal> allMethods = new ArrayList<>();

您需要将所有方法的返回类型更改为Signal,以将其添加到列表中。就像您无法向Integer添加List<String>一样,除Signal

之外,您无法添加任何其他内容

我不确定您的代码逻辑,是否可以更改返回类型,但是将所有方法返回类型更改为List<Signal>应该可以正常工作。

此外,您还需要

的return语句
Signal

如果方法不为void且返回类型应与函数类型相同,则必须始终public List<Signal> inspect(List<Signal> inputs)