Advertisement
Guest User

Untitled

a guest
Feb 22nd, 2019
79
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 2.79 KB | None | 0 0
  1. package no.uib.info233.oblig1;
  2.  
  3. /**
  4.  * Tar en tabell med infix notert regnestykke og konverter det til prefix notasjon.
  5.  *
  6.  * @author Martin Johannessen
  7.  */
  8. public class InfixToPrefix {
  9.  
  10.     /**
  11.      * Tar en streng og gir den en precedence.
  12.      *
  13.      * @return precedence the precedence of signs
  14.      */
  15.     private int precedence(String s) {
  16.         int precedence;
  17.         switch (s) {
  18.             case "*":
  19.                 precedence = 2;
  20.                 break;
  21.             case "/":
  22.                 precedence = 2;
  23.                 break;
  24.             case "+":
  25.                 precedence = 1;
  26.                 break;
  27.             case "-":
  28.                 precedence = 1;
  29.                 break;
  30.             default:
  31.                 precedence = 0;
  32.                 break;
  33.         }
  34.         return precedence;
  35.     }
  36.  
  37.     /**
  38.      * Tar en tabell med infix notert regnestykke og konverter det til prefix notasjon.
  39.      *
  40.      * @param input the infix notasjon
  41.      * @return String[] the prefix notasjon
  42.      */
  43.     public String[] infixToPrefix(String[] input) throws TwostackFullExeption, TwostackEmptyExeption {
  44.         Twostack<String> myStack = new TwostackArray<>();
  45.  
  46.         for (String s : input) {
  47.             if (precedence(s) == 0) {
  48.                 myStack.push(false, s);
  49.             } else if (((TwostackArray<String>) myStack).isEmpty(true)) {
  50.                 myStack.push(true, s);
  51.             } else if (precedence(s) > precedence(myStack.peek(true))) {
  52.                 myStack.push(true, s);
  53.             } else {
  54.                 while (precedence(s) <= precedence(myStack.peek(true))) {
  55.                     String operand1 = myStack.pop(false);
  56.                     String operand2 = myStack.pop(false);
  57.                     String operator = myStack.pop(true);
  58.                     //bytter rekkefølgen på operandene i forhold til den gitte algoritmen i oppgaven for å få rett svar
  59.                     String newOperand = operator + operand2 + operand1;
  60.                     myStack.push(false, newOperand);
  61.                     if (((TwostackArray<String>) myStack).isEmpty(true)) break;
  62.                 }
  63.                 myStack.push(true, s);
  64.             }
  65.         }
  66.         // trengte ei løkke til i tilleg til den gitte algoritmen for å få rett svar
  67.         while (!((TwostackArray<String>) myStack).isEmpty(true)) {
  68.             String operand1 = myStack.pop(false);
  69.             String operand2 = myStack.pop(false);
  70.             String operator = myStack.pop(true);
  71.             String newOperand = operator + operand2 + operand1;
  72.             myStack.push(false, newOperand);
  73.         }
  74.  
  75.         //streng med prefix notasjon
  76.         String prefix = myStack.pop(false);
  77.  
  78.         //returnerer i tabellformat
  79.         return prefix.split("(?!^)");
  80.  
  81.     }
  82. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement