From 7bb6be21b608852ffb4fd4fb8b46539700d137d7 Mon Sep 17 00:00:00 2001 From: lukas-heiligenbrunner Date: Mon, 13 Apr 2020 12:56:58 +0200 Subject: [PATCH] reformat code simplified generateion of new gates --- eu.heili/AndGate.java | 2 +- eu.heili/DigitalInput.java | 22 +++++++++++++++++----- eu.heili/InputOutOfBoundsException.java | 2 +- eu.heili/LogicGate.java | 22 +++++++++++----------- eu.heili/Main.java | 6 +++++- eu.heili/OrGate.java | 6 +++--- eu.heili/TooManyInputsException.java | 2 +- 7 files changed, 39 insertions(+), 23 deletions(-) diff --git a/eu.heili/AndGate.java b/eu.heili/AndGate.java index efce0b6..63c0b7c 100644 --- a/eu.heili/AndGate.java +++ b/eu.heili/AndGate.java @@ -5,7 +5,7 @@ public class AndGate extends LogicGate { throw (new TooManyInputsException()); } - public AndGate(boolean... inputvals) { + public AndGate(DigitalInput... inputvals) { super(inputvals); } diff --git a/eu.heili/DigitalInput.java b/eu.heili/DigitalInput.java index 210b20d..133b207 100644 --- a/eu.heili/DigitalInput.java +++ b/eu.heili/DigitalInput.java @@ -2,7 +2,19 @@ public class DigitalInput { private boolean value = false; public DigitalInput(boolean value) { - this.value = value; + setValue(value); + } + + public DigitalInput(LogicGate gate) { + setValue(gate); + } + + public DigitalInput(int value) { + setValue(value); + } + + public DigitalInput(char value) { + setValue(value); } /** @@ -11,6 +23,10 @@ public class DigitalInput { public DigitalInput() { } + public boolean getValue() { + return value; + } + public void setValue(boolean value) { this.value = value; } @@ -26,8 +42,4 @@ public class DigitalInput { public void setValue(char value) { this.value = value == 'H'; } - - public boolean getValue() { - return value; - } } diff --git a/eu.heili/InputOutOfBoundsException.java b/eu.heili/InputOutOfBoundsException.java index 3fa4e5b..8568c86 100644 --- a/eu.heili/InputOutOfBoundsException.java +++ b/eu.heili/InputOutOfBoundsException.java @@ -1,4 +1,4 @@ -public class InputOutOfBoundsException extends RuntimeException{ +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 931000f..5f915f5 100644 --- a/eu.heili/LogicGate.java +++ b/eu.heili/LogicGate.java @@ -1,26 +1,26 @@ import java.util.ArrayList; +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++) { inputs.add(new DigitalInput()); // generate new objects for new inputs } } - public LogicGate(boolean... inputvals) { - for (boolean i:inputvals) { - inputs.add(new DigitalInput(i)); - } + public LogicGate(DigitalInput... inputvals) { + inputs.addAll(Arrays.asList(inputvals)); } + /** + * validate gate output. + * + * @return validated output + */ + public abstract boolean getOutput(); + public DigitalInput getInput(int nr) { if (nr >= getInputNumber()) throw (new InputOutOfBoundsException()); @@ -31,7 +31,7 @@ public abstract class LogicGate { return inputs.size(); } - public void addInput(DigitalInput in){ + public void addInput(DigitalInput in) { inputs.add(in); } } diff --git a/eu.heili/Main.java b/eu.heili/Main.java index d837e9f..a8f96e4 100644 --- a/eu.heili/Main.java +++ b/eu.heili/Main.java @@ -13,7 +13,11 @@ public class Main { // Setze Eingang 1 auf 1. o1.getInput(1).setValue(0); - AndGate gt = new AndGate(false,true,false); + AndGate gt = new AndGate( + new DigitalInput(false), + new DigitalInput(true), + new DigitalInput(o1), + new DigitalInput('H')); System.out.println(a2.getOutput()); } diff --git a/eu.heili/OrGate.java b/eu.heili/OrGate.java index a57605f..f21f0a6 100644 --- a/eu.heili/OrGate.java +++ b/eu.heili/OrGate.java @@ -1,16 +1,16 @@ -public class OrGate extends LogicGate{ +public class OrGate extends LogicGate { public OrGate(int inputnr) { super(inputnr); } - public OrGate(boolean... inputvals) { + public OrGate(DigitalInput... 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/TooManyInputsException.java b/eu.heili/TooManyInputsException.java index 16313cb..751de5c 100644 --- a/eu.heili/TooManyInputsException.java +++ b/eu.heili/TooManyInputsException.java @@ -1,4 +1,4 @@ -public class TooManyInputsException extends RuntimeException{ +public class TooManyInputsException extends RuntimeException { public TooManyInputsException() { super("Too many inputs."); }