Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package no.uib.info233.oblig1;
- /**
- * Tar en tabell med infix notert regnestykke og konverter det til prefix notasjon.
- *
- * @author Martin Johannessen
- */
- public class InfixToPrefix {
- /**
- * Tar en streng og gir den en precedence.
- *
- * @return precedence the precedence of signs
- */
- private int precedence(String s) {
- int precedence;
- switch (s) {
- case "*":
- precedence = 2;
- break;
- case "/":
- precedence = 2;
- break;
- case "+":
- precedence = 1;
- break;
- case "-":
- precedence = 1;
- break;
- default:
- precedence = 0;
- break;
- }
- return precedence;
- }
- /**
- * Tar en tabell med infix notert regnestykke og konverter det til prefix notasjon.
- *
- * @param input the infix notasjon
- * @return String[] the prefix notasjon
- */
- public String[] infixToPrefix(String[] input) throws TwostackFullExeption, TwostackEmptyExeption {
- Twostack<String> myStack = new TwostackArray<>();
- for (String s : input) {
- if (precedence(s) == 0) {
- myStack.push(false, s);
- } else if (((TwostackArray<String>) myStack).isEmpty(true)) {
- myStack.push(true, s);
- } else if (precedence(s) > precedence(myStack.peek(true))) {
- myStack.push(true, s);
- } else {
- while (precedence(s) <= precedence(myStack.peek(true))) {
- String operand1 = myStack.pop(false);
- String operand2 = myStack.pop(false);
- String operator = myStack.pop(true);
- //bytter rekkefølgen på operandene i forhold til den gitte algoritmen i oppgaven for å få rett svar
- String newOperand = operator + operand2 + operand1;
- myStack.push(false, newOperand);
- if (((TwostackArray<String>) myStack).isEmpty(true)) break;
- }
- myStack.push(true, s);
- }
- }
- // trengte ei løkke til i tilleg til den gitte algoritmen for å få rett svar
- while (!((TwostackArray<String>) myStack).isEmpty(true)) {
- String operand1 = myStack.pop(false);
- String operand2 = myStack.pop(false);
- String operator = myStack.pop(true);
- String newOperand = operator + operand2 + operand1;
- myStack.push(false, newOperand);
- }
- //streng med prefix notasjon
- String prefix = myStack.pop(false);
- //returnerer i tabellformat
- return prefix.split("(?!^)");
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement