From 5b271a57b3ccca713a379c19fe4826ef2619c85b Mon Sep 17 00:00:00 2001 From: lukas-heiligenbrunner Date: Mon, 13 Apr 2020 11:14:15 +0200 Subject: [PATCH] basic class definitions --- eu.heili/AndGate.java | 21 ++++++++++++++ eu.heili/DigitalInput.java | 41 ++++++++++++++++++++++++++++ eu.heili/EnxorGate.java | 2 ++ eu.heili/ExorGate.java | 2 ++ eu.heili/LogicGate.java | 27 ++++++++++++++++++ eu.heili/Main.java | 15 +++++++++- eu.heili/NorGate.java | 2 ++ eu.heili/NotGate.java | 2 ++ eu.heili/OrGate.java | 18 ++++++++++++ eu.heili/TooManyInputsException.java | 5 ++++ 10 files changed, 134 insertions(+), 1 deletion(-) create mode 100644 eu.heili/AndGate.java create mode 100644 eu.heili/DigitalInput.java create mode 100644 eu.heili/EnxorGate.java create mode 100644 eu.heili/ExorGate.java create mode 100644 eu.heili/LogicGate.java create mode 100644 eu.heili/NorGate.java create mode 100644 eu.heili/NotGate.java create mode 100644 eu.heili/OrGate.java create mode 100644 eu.heili/TooManyInputsException.java diff --git a/eu.heili/AndGate.java b/eu.heili/AndGate.java new file mode 100644 index 0000000..dd93231 --- /dev/null +++ b/eu.heili/AndGate.java @@ -0,0 +1,21 @@ +public class AndGate extends LogicGate{ + public AndGate(int inputnr) { + super(inputnr); + if(inputnr>8){ + throw(new TooManyInputsException()); + } + } + + public AndGate(DigitalInput... inputvals) { + super(inputvals); + } + + @Override + public boolean getOutput() { + boolean state = getInput(0).getValue(); + for(int i = 1; i < getInputNumber(); i++){ + state &= getInput(i).getValue(); + } + return state; + } +} diff --git a/eu.heili/DigitalInput.java b/eu.heili/DigitalInput.java new file mode 100644 index 0000000..389e466 --- /dev/null +++ b/eu.heili/DigitalInput.java @@ -0,0 +1,41 @@ +public class DigitalInput { + private boolean value = false; + + public DigitalInput(boolean value) { + this.value = value; + } + + /** + * default value is false! + */ + public DigitalInput() { + } + + public void setValue(boolean value) { + this.value = value; + } + + public void setValue(LogicGate gate) { + this.value = gate.getOutput(); // todo validation stuff + } + + public void setValue(int value) { + if(value > 0){ + this.value = true; + }else{ + this.value = false; + } + } + + public void setValue(char value) { + if(value == 'H'){ + this.value = true; + }else{ + this.value = false; + } + } + + public boolean getValue() { + return value; + } +} diff --git a/eu.heili/EnxorGate.java b/eu.heili/EnxorGate.java new file mode 100644 index 0000000..f92acc7 --- /dev/null +++ b/eu.heili/EnxorGate.java @@ -0,0 +1,2 @@ +public class EnxorGate { +} diff --git a/eu.heili/ExorGate.java b/eu.heili/ExorGate.java new file mode 100644 index 0000000..bebc130 --- /dev/null +++ b/eu.heili/ExorGate.java @@ -0,0 +1,2 @@ +public class ExorGate { +} diff --git a/eu.heili/LogicGate.java b/eu.heili/LogicGate.java new file mode 100644 index 0000000..fa928c2 --- /dev/null +++ b/eu.heili/LogicGate.java @@ -0,0 +1,27 @@ +import java.util.ArrayList; +import java.util.Arrays; + +public abstract class LogicGate { + private final ArrayList inputs = new ArrayList<>(); + + public LogicGate(int inputnr) { + 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 abstract boolean getOutput(); + + public DigitalInput getInput(int nr) { + // todo validate existance of nr --> indexoutofbounds exception + return inputs.get(nr); + } + + public int getInputNumber(){ + return inputs.size(); + } +} diff --git a/eu.heili/Main.java b/eu.heili/Main.java index c53f6df..13c3dff 100644 --- a/eu.heili/Main.java +++ b/eu.heili/Main.java @@ -1,5 +1,18 @@ -public class Main{ +public class Main { public static void main(String[] args) { System.out.println("bla"); + + OrGate o1 = new OrGate(2); + AndGate a2 = new AndGate(2); + // Verbinde Eingang 0 mit dem Ausgang vom OR - Gate. + a2.getInput(0).setValue(o1); + // Setze Eingang 1 auf 1. + a2.getInput(1).setValue(0); + // Setze Eingang 0 auf 0. + o1.getInput(0).setValue(0); + // Setze Eingang 1 auf 1. + o1.getInput(1).setValue(0); + + System.out.println(a2.getOutput()); } } \ No newline at end of file diff --git a/eu.heili/NorGate.java b/eu.heili/NorGate.java new file mode 100644 index 0000000..796540e --- /dev/null +++ b/eu.heili/NorGate.java @@ -0,0 +1,2 @@ +public class NorGate { +} diff --git a/eu.heili/NotGate.java b/eu.heili/NotGate.java new file mode 100644 index 0000000..5fe7711 --- /dev/null +++ b/eu.heili/NotGate.java @@ -0,0 +1,2 @@ +public class NotGate { +} diff --git a/eu.heili/OrGate.java b/eu.heili/OrGate.java new file mode 100644 index 0000000..0da9676 --- /dev/null +++ b/eu.heili/OrGate.java @@ -0,0 +1,18 @@ +public class OrGate extends LogicGate{ + public OrGate(int inputnr) { + super(inputnr); + } + + public OrGate(DigitalInput... inputvals) { + super(inputvals); + } + + @Override + public boolean getOutput() { + boolean state = getInput(0).getValue(); + 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 new file mode 100644 index 0000000..16313cb --- /dev/null +++ b/eu.heili/TooManyInputsException.java @@ -0,0 +1,5 @@ +public class TooManyInputsException extends RuntimeException{ + public TooManyInputsException() { + super("Too many inputs."); + } +}