Так что мой код в настоящее время работает как конвертер инфиксов в постфиксы, но для дополнительной пользы профессор поручил нам оценить постфикс с любыми заданными значениями для каждой переменной. Учитывая, что входные данные взяты из текстового файла с использованием 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");
}
}
}`