From fe5920fc3681a9791fb1bf2260ea06f8f62a5e3e Mon Sep 17 00:00:00 2001 From: "artem.didytschuk" Date: Sat, 17 Apr 2021 20:19:53 +0200 Subject: [PATCH] Punkt vor Strich Regel implementiert --- List.java | 3 +-- Rechenmaschine.java | 37 +++++++++++++++++++++++++++++++++---- 2 files changed, 34 insertions(+), 6 deletions(-) diff --git a/List.java b/List.java index 8c82b92..e168a8a 100755 --- a/List.java +++ b/List.java @@ -330,7 +330,7 @@ public class List { * pNode == null ist, pNode nicht in der Liste ist oder pNode der erste Knoten * der Liste ist */ - private ListNode getPrevious(ListNode pNode) { + public ListNode getPrevious(ListNode pNode) { if (pNode != null && pNode != first && !this.isEmpty()) { ListNode temp = first; while (temp != null && temp.getNextNode() != pNode) { @@ -341,5 +341,4 @@ public class List { return null; } } - } diff --git a/Rechenmaschine.java b/Rechenmaschine.java index a258e81..23c35e0 100644 --- a/Rechenmaschine.java +++ b/Rechenmaschine.java @@ -19,7 +19,7 @@ public class Rechenmaschine { tokenlist = new List<>(); Scanner input = new Scanner(System.in); - System.out.println("Gib einen Plusterm ein und bestätige mit ENTER: "); + System.out.println("Gib einen Term ein und bestätige mit ENTER: "); String eingabe = input.nextLine(); input.close(); @@ -248,9 +248,40 @@ public class Rechenmaschine { return true; } + public void punktVorStrich(){ + tokenlist.toFirst(); + while(tokenlist.hasAccess()){ + if(tokenlist.getContent().getToken().equals("*")){ + tokenlist.remove(); + Double a = Double.parseDouble(tokenlist.getContent().getToken()); + + tokenlist.current=tokenlist.getPrevious(tokenlist.current); + Double b = Double.parseDouble(tokenlist.getContent().getToken()); + + tokenlist.remove(); + + tokenlist.getContent().setToken(String.valueOf(a*b)); + } else if(tokenlist.getContent().getToken().equals("/")){ + tokenlist.remove(); + + Double b = Double.parseDouble(tokenlist.getContent().getToken()); + + //Previous muss gelöscht werden, tokenlist.getContent != null ist, + // wenn der 2. Token am ende des Termes ist. + tokenlist.current=tokenlist.getPrevious(tokenlist.current); + Double a = Double.parseDouble(tokenlist.getContent().getToken()); + + tokenlist.remove(); + + tokenlist.getContent().setToken(String.valueOf(a/b)); + } + tokenlist.next(); + } + } + public void run() { result = 0; - + punktVorStrich(); tokenlist.toFirst(); String previous=""; while( tokenlist.hasAccess() ) { @@ -262,8 +293,6 @@ public class Rechenmaschine { switch (previous) { case "+", "" -> result += Double.parseDouble(currentToken.getToken()); case "-" -> result -= Double.parseDouble(currentToken.getToken()); - case "*" -> result *= Double.parseDouble(currentToken.getToken()); - default -> result /= Double.parseDouble(currentToken.getToken()); } } tokenlist.next();