diff --git a/eu.heili/AndGate.java b/eu.heili/AndGate.java index 1fc995b..a56d59c 100644 --- a/eu.heili/AndGate.java +++ b/eu.heili/AndGate.java @@ -7,6 +7,8 @@ public class AndGate extends LogicGate { public AndGate(final DigitalInput... inputvals) { super(inputvals); + if (inputvals.length > 8) + throw (new TooManyInputsException()); } @Override diff --git a/eu.heili/EnxorGate.java b/eu.heili/EnxorGate.java index f92acc7..3151b5e 100644 --- a/eu.heili/EnxorGate.java +++ b/eu.heili/EnxorGate.java @@ -1,2 +1,14 @@ -public class EnxorGate { +public class EnxorGate extends ExorGate{ + public EnxorGate(int inputnr) { + super(inputnr); + } + + public EnxorGate(DigitalInput... inputvals) { + super(inputvals); + } + + @Override + public boolean getOutput() { + return !super.getOutput(); + } } diff --git a/eu.heili/ExorGate.java b/eu.heili/ExorGate.java index bebc130..2757b8a 100644 --- a/eu.heili/ExorGate.java +++ b/eu.heili/ExorGate.java @@ -1,2 +1,24 @@ -public class ExorGate { +public class ExorGate extends LogicGate { + public ExorGate(int inputnr) { + super(inputnr); + if (inputnr > 2) + throw (new TooManyInputsException()); + } + + public ExorGate(DigitalInput... inputvals) { + super(inputvals); + if (inputvals.length > 2) + throw (new TooManyInputsException()); + } + + @Override + public boolean getOutput() { + boolean first = getInput(0).getValue(); + for (int i = 1; i < getInputNumber(); i++) { + if (getInput(i).getValue() != first) + return true; // if there is one change return true + first = getInput(i).getValue(); + } + return false; // all values are the same... + } } diff --git a/eu.heili/Main.java b/eu.heili/Main.java index a8f96e4..8881345 100644 --- a/eu.heili/Main.java +++ b/eu.heili/Main.java @@ -1,7 +1,6 @@ public class Main { public static void main(String[] args) { - System.out.println("bla"); - + // teacher example: OrGate o1 = new OrGate(2); AndGate a2 = new AndGate(2); // Verbinde Eingang 0 mit dem Ausgang vom OR - Gate. @@ -13,12 +12,69 @@ public class Main { // Setze Eingang 1 auf 1. o1.getInput(1).setValue(0); + + /** some definition tests with better syntax (; */ AndGate gt = new AndGate( - new DigitalInput(false), + new DigitalInput(0), new DigitalInput(true), new DigitalInput(o1), - new DigitalInput('H')); + new DigitalInput('H') + ); - System.out.println(a2.getOutput()); + LogicGate or = new AndGate( + new DigitalInput(0), + new DigitalInput(1) + ); + System.out.println(or.getOutput()); + + LogicGate nor = new NandGate( + new DigitalInput(0), + new DigitalInput(1) + ); + + + /** bsp 1 **/ + + boolean x = false; + boolean y = true; + + LogicGate s = new OrGate( + new DigitalInput(new AndGate( + new DigitalInput(new NotGate( + new DigitalInput(x) + )), + new DigitalInput(y) + )), + new DigitalInput(new AndGate( + new DigitalInput(x), + new DigitalInput(new NotGate( + new DigitalInput(y) + )) + )) + ); + + LogicGate c = new AndGate( + new DigitalInput(x), + new DigitalInput(y) + ); + System.out.println("Bsp1"); + System.out.println("output of c: " + c.getOutput()); + System.out.println("output of s: " + s.getOutput()); + + /** bsp. 2 **/ + boolean xx = true; + boolean yy = false; + + LogicGate ss = new ExorGate( + new DigitalInput(xx), + new DigitalInput(yy) + ); + LogicGate cc = new AndGate( + new DigitalInput(xx), + new DigitalInput(yy) + ); + System.out.println("Bsp2"); + System.out.println("output of c: " + cc.getOutput()); + System.out.println("output of s: " + ss.getOutput()); } } \ No newline at end of file diff --git a/eu.heili/NandGate.java b/eu.heili/NandGate.java new file mode 100644 index 0000000..7112836 --- /dev/null +++ b/eu.heili/NandGate.java @@ -0,0 +1,14 @@ +public class NandGate extends AndGate{ + public NandGate(int inputnr) { + super(inputnr); + } + + public NandGate(DigitalInput... inputvals) { + super(inputvals); + } + + @Override + public boolean getOutput() { + return !super.getOutput(); + } +} diff --git a/eu.heili/NorGate.java b/eu.heili/NorGate.java index 796540e..14e2ff1 100644 --- a/eu.heili/NorGate.java +++ b/eu.heili/NorGate.java @@ -1,2 +1,14 @@ -public class NorGate { +public class NorGate extends OrGate{ + public NorGate(int inputnr) { + super(inputnr); + } + + public NorGate(DigitalInput... inputvals) { + super(inputvals); + } + + @Override + public boolean getOutput() { + return !super.getOutput(); + } } diff --git a/eu.heili/NotGate.java b/eu.heili/NotGate.java index 5fe7711..5877212 100644 --- a/eu.heili/NotGate.java +++ b/eu.heili/NotGate.java @@ -1,2 +1,14 @@ -public class NotGate { +public class NotGate extends LogicGate{ + public NotGate() { + super(1); + } + + public NotGate(DigitalInput inputval) { + super(inputval); + } + + @Override + public boolean getOutput() { + return !getInput(0).getValue(); + } } diff --git a/eu.heili/OrGate.java b/eu.heili/OrGate.java index c3b60d5..4dd73e5 100644 --- a/eu.heili/OrGate.java +++ b/eu.heili/OrGate.java @@ -1,10 +1,14 @@ public class OrGate extends LogicGate { public OrGate(final int inputnr) { super(inputnr); + if (inputnr > 8) + throw (new TooManyInputsException()); } public OrGate(final DigitalInput... inputvals) { super(inputvals); + if (inputvals.length > 8) + throw (new TooManyInputsException()); } @Override