commit 494b70579ca2087babf25c478ff8aed6be31dcad Author: haeslelu Date: Mon Mar 21 12:45:38 2022 +0100 Baum diff --git a/Rechner/.classpath b/Rechner/.classpath new file mode 100644 index 0000000..d54800d --- /dev/null +++ b/Rechner/.classpath @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/Rechner/.gitignore b/Rechner/.gitignore new file mode 100644 index 0000000..ae3c172 --- /dev/null +++ b/Rechner/.gitignore @@ -0,0 +1 @@ +/bin/ diff --git a/Rechner/.project b/Rechner/.project new file mode 100644 index 0000000..0f3914b --- /dev/null +++ b/Rechner/.project @@ -0,0 +1,17 @@ + + + Rechner + + + + + + org.eclipse.jdt.core.javabuilder + + + + + + org.eclipse.jdt.core.javanature + + diff --git a/Rechner/.settings/org.eclipse.jdt.core.prefs b/Rechner/.settings/org.eclipse.jdt.core.prefs new file mode 100644 index 0000000..f2525a8 --- /dev/null +++ b/Rechner/.settings/org.eclipse.jdt.core.prefs @@ -0,0 +1,14 @@ +eclipse.preferences.version=1 +org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled +org.eclipse.jdt.core.compiler.codegen.targetPlatform=11 +org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve +org.eclipse.jdt.core.compiler.compliance=11 +org.eclipse.jdt.core.compiler.debug.lineNumber=generate +org.eclipse.jdt.core.compiler.debug.localVariable=generate +org.eclipse.jdt.core.compiler.debug.sourceFile=generate +org.eclipse.jdt.core.compiler.problem.assertIdentifier=error +org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled +org.eclipse.jdt.core.compiler.problem.enumIdentifier=error +org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=warning +org.eclipse.jdt.core.compiler.release=enabled +org.eclipse.jdt.core.compiler.source=11 diff --git a/Rechner/src/Calculator.java b/Rechner/src/Calculator.java new file mode 100644 index 0000000..db102b2 --- /dev/null +++ b/Rechner/src/Calculator.java @@ -0,0 +1,71 @@ + +public class Calculator { + public Node erzeugeBeispielBaum() { + Node root = new Node (new Symbol ("*")); + root.left = new Node(new Symbol("3")); + root.right = new Node(new Symbol("+")); + root.right.left = new Node (new Symbol ("5")); + root.right.right = new Node (new Symbol ("8")); + + return root; + + } + public int berechne(Node n) { + if(n.left == null) { + return n.content.getInt(); + } + else { + int links = berechne(n.left); + int rechts = berechne(n.right); + if(n.content.istMal() ) { + return links* rechts; + } else { + return links + rechts; + } + } + } + public void infixAusgeben(Node n) { + + // wenn Blatt(also letztes) + if( n.left == null) { + System.out.print( n.content); // wenn keine toString-Methode in Symbo Klasse dann n.content.getInt(); + } + else { + // links ausgeben + if(n.content.istMal() && n.left.content.istPlus() ) { + System.out.print("("); + infixAusgeben(n.left); + System.out.print(")"); + } + else { + infixAusgeben(n.left); + } + + // Operator ausgeben + // if( n.content.istMal() ) { + System.out.print(n.content); // System.out.println("*"); + // } else { + // System.out.println("+"); } + + // rechts ausgeben + // wenn aktuell ein * und rechts ein + dann mit Klammern + + if(n.content.istMal() && n.right.content.istPlus() ) { + System.out.print("("); + infixAusgeben(n.right); + System.out.print(")"); + } + else { + infixAusgeben(n.right); + } + + + } + + } + + +} + + + diff --git a/Rechner/src/Node.java b/Rechner/src/Node.java new file mode 100644 index 0000000..945cac8 --- /dev/null +++ b/Rechner/src/Node.java @@ -0,0 +1,12 @@ + +public class Node { + + public T content; + public Node left , right; + + public Node(T zahl) { + this.content = zahl; + left = null; + right = null; + } +} diff --git a/Rechner/src/Symbol.java b/Rechner/src/Symbol.java new file mode 100644 index 0000000..183f563 --- /dev/null +++ b/Rechner/src/Symbol.java @@ -0,0 +1,38 @@ + +public class Symbol { + private String s; + + public Symbol(String _s) { + this.s = _s; + } + + public boolean istMal() { + if(this.s == "*") return true; // oder return s == "*" ; + return false; + } + + public boolean istPlus() { + return s == "+"; + } + + public boolean istOperator() { + return istPlus() || istMal() ; + } + + public boolean istZahl() { + + if(!istOperator()) return true; + return false; + } + + public int getInt() { + + if( istZahl() == true) return Integer.parseInt(s); + return 0; + + } + + public String toString() { + return s; + } +} diff --git a/Rechner/src/Test.java b/Rechner/src/Test.java new file mode 100644 index 0000000..bab21c3 --- /dev/null +++ b/Rechner/src/Test.java @@ -0,0 +1,14 @@ + +public class Test { + public static void main(String[] args) { + + Calculator c = new Calculator(); + + Node root = c.erzeugeBeispielBaum(); + int ergebnis = c.berechne(root); + System.out.println(ergebnis); + + c.infixAusgeben(root); + } + +}