From ed29c393e04f8d662fc58fc8eea7c394ac24c0e4 Mon Sep 17 00:00:00 2001 From: lukas-heiligenbrunner Date: Mon, 13 Apr 2020 11:23:57 +0200 Subject: [PATCH] new InputOutOfBoundsException --- eu.heili/AndGate.java | 11 +++++------ eu.heili/InputOutOfBoundsException.java | 5 +++++ eu.heili/LogicGate.java | 21 ++++++++++++++------- eu.heili/Main.java | 2 ++ eu.heili/OrGate.java | 2 +- 5 files changed, 27 insertions(+), 14 deletions(-) create mode 100644 eu.heili/InputOutOfBoundsException.java diff --git a/eu.heili/AndGate.java b/eu.heili/AndGate.java index dd93231..efce0b6 100644 --- a/eu.heili/AndGate.java +++ b/eu.heili/AndGate.java @@ -1,19 +1,18 @@ -public class AndGate extends LogicGate{ +public class AndGate extends LogicGate { public AndGate(int inputnr) { super(inputnr); - if(inputnr>8){ - throw(new TooManyInputsException()); - } + if (inputnr > 8) + throw (new TooManyInputsException()); } - public AndGate(DigitalInput... inputvals) { + public AndGate(boolean... inputvals) { super(inputvals); } @Override public boolean getOutput() { boolean state = getInput(0).getValue(); - for(int i = 1; i < getInputNumber(); i++){ + for (int i = 1; i < getInputNumber(); i++) { state &= getInput(i).getValue(); } return state; diff --git a/eu.heili/InputOutOfBoundsException.java b/eu.heili/InputOutOfBoundsException.java new file mode 100644 index 0000000..3fa4e5b --- /dev/null +++ b/eu.heili/InputOutOfBoundsException.java @@ -0,0 +1,5 @@ +public class InputOutOfBoundsException extends RuntimeException{ + public InputOutOfBoundsException() { + super("Input out of bounds!"); + } +} diff --git a/eu.heili/LogicGate.java b/eu.heili/LogicGate.java index fa928c2..2f4e493 100644 --- a/eu.heili/LogicGate.java +++ b/eu.heili/LogicGate.java @@ -4,24 +4,31 @@ import java.util.Arrays; public abstract class LogicGate { private final ArrayList inputs = new ArrayList<>(); + /** + * validate gate output. + * @return validated output + */ + public abstract boolean getOutput(); + public LogicGate(int inputnr) { - for(int i=0; i < inputnr; i++){ + for (int i = 0; i < inputnr; i++) { inputs.add(new DigitalInput()); // generate new objects for new inputs } } - public LogicGate(DigitalInput... inputvals) { - inputs.addAll(Arrays.asList(inputvals)); + public LogicGate(boolean... inputvals) { + for (boolean i:inputvals) { + inputs.add(new DigitalInput(i)); + } } - public abstract boolean getOutput(); - public DigitalInput getInput(int nr) { - // todo validate existance of nr --> indexoutofbounds exception + if (nr >= getInputNumber()) + throw (new InputOutOfBoundsException()); return inputs.get(nr); } - public int getInputNumber(){ + public int getInputNumber() { return inputs.size(); } } diff --git a/eu.heili/Main.java b/eu.heili/Main.java index 13c3dff..d837e9f 100644 --- a/eu.heili/Main.java +++ b/eu.heili/Main.java @@ -13,6 +13,8 @@ public class Main { // Setze Eingang 1 auf 1. o1.getInput(1).setValue(0); + AndGate gt = new AndGate(false,true,false); + System.out.println(a2.getOutput()); } } \ No newline at end of file diff --git a/eu.heili/OrGate.java b/eu.heili/OrGate.java index 0da9676..a57605f 100644 --- a/eu.heili/OrGate.java +++ b/eu.heili/OrGate.java @@ -3,7 +3,7 @@ public class OrGate extends LogicGate{ super(inputnr); } - public OrGate(DigitalInput... inputvals) { + public OrGate(boolean... inputvals) { super(inputvals); }