инфикс в постфикс в постфиксный анализ - PullRequest
0 голосов
/ 24 октября 2019

Так что мой код в настоящее время работает как конвертер инфиксов в постфиксы, но для дополнительной пользы профессор поручил нам оценить постфикс с любыми заданными значениями для каждой переменной. Учитывая, что входные данные взяты из текстового файла с использованием Scanner, мы можем использовать только стек из java.util. Мне нужна помощь в том, что проблема с моим кодом. Также нам разрешено запускать код только через терминал. Я продолжаю получать неправильную оценку и ошибку "Exception java.util.EmptyStackException" Кто-нибудь, пожалуйста, помогите. Кстати ввод текстового файла прикреплен к этому телу. Вот код Текстовый файл нажмите здесь

`

import java.util.*;

public class HarouEC{

static int precedence(char c){
    switch (c){
        case '%':
            return 1;
        case '+':
        case '-':
            return 2;
        case '*':
        case '/':
            return 3;
        case '^':
            return 4;

    }
    return -1;
}

static char computeEC(double val1, double val2, char c){
     char result;
     double x = 0;
        switch(c) 
            { 
                case '+': 
                x = val2 + val1; 
                break; 

                case '-': 
                x = val2 - val1; 
                break; 

                case '/': 
                x = val2 / val1; 
                break; 

                case '*': 
                x = val2 * val1; 
                break; 

                case '^':
                x = Math.pow(val2, val1);
                break;
          } 
          result = (char) x;
  return result;
}

static double eval(String s){
  char op1, op2, z;
  char c;
  int n = s.length();
  Stack<Character> stk = new Stack<>();
  for (int i = 0; i < n; i++){
     c = s.charAt(i);
        if(Character.isLetterOrDigit(c)){
           stk.push(c);
        }
        else {
           op2 = stk.pop();
           op1 = stk.pop();
           z = computeEC(op1, op2, c);
           stk.push(z);
        }
  }
  return stk.pop();
}


static String postfix(String iexp){
    String result = "";
    Stack<Character> stack = new Stack<>();
    for (int i = 0; i <iexp.length() ; i++) {

        char c = iexp.charAt(i);

        //check if char is operator
        if(precedence(c)>0){
            while(stack.isEmpty()==false && precedence(stack.peek())>=precedence(c)){
                result += stack.pop();
            }
            stack.push(c);
        }else if(c==')'){
            char x = stack.pop();
            while(x!='('){
                result += x;
                x = stack.pop();
            }
        }else if(c=='('){
            stack.push(c);
        }else{
            //character is neither operator nor ( 
            result += c;
        }
    }
    for (int i = 0; i <=stack.size() ; i++) {
        result += stack.pop();
    }
    return result;
}

public static void main(String args[]) {
    String test;
    HarouEC p = new HarouEC (); 
    String iexp, piexp;  //infix postfix iexpression
    double peval;            
  try{
     Scanner inf = new Scanner (System.in);                    
        while(inf.hasNext()){                              
           iexp = inf.next();
              if (iexp.contains(" ")) break;
              piexp = p.postfix(iexp);
              peval = eval(piexp);
              System.out.printf("\nPosfix of %s is: %s", iexp, piexp);
              System.out.printf("\nEvaluation of piexp: %s\n", peval);
}
inf.close();
}
     catch (Exception e) {
        System.out.println("\nException " + e + "\n");
     }
 }
}`
...