import java.util.*;
public class Pemdas {
public static double Express(String str)
{
Stack<Double> num = new Stack<Double>();
Stack<String> op = new Stack<String>();
String number = "[0-9]*"; // any digit from 0-9
for (int i = 0; i < str.length(); i++)
{
if (str.substring(i,i+1).equals(number))
num.push(Double.parseDouble(str.substring(i, i+1)));
else if (str.substring(i, i+1).equals("+"))
op.push(str.substring(i, i +1));
System.out.println(str);
}
double n = num.pop();
if (op.pop().equals("+"))
n = n + num.pop();
return n;
}
public static void main(String[] args)
{
System.out.print("Enter an Expression: ");
String ex = StdIn.readString(); // This is where I enter my string input
System.out.println(Express(ex));
}
}
Предположим, что у меня есть строковая переменная «5 + 5» в качестве моего ввода. В цикле for 5 предполагается, что он будет помещен в числовой стек, но я продолжаю получать ESE, и я не понимаю, почему.Почему мои строковые переменные не помещаются в мои стопки?
Учитывает ли '+' как литеральную строку, или она включена в регулярное выражение? Я пробовал то же самое с моим стеком op, но это тоже пусто. – iii
@igknighton Все, что вы передаете как аргумент 'equals()', рассматривается как буквальная строка. – arshajii
Хорошо, мой стек op все еще считается пустым. Это из-за пространства между 5s и +? – iii