2014-01-16 1 views
0

Создайте метод parseEqn, который получит 1 переменную String и вернет двойное значение переданного ему выражения.string variable return as double

parseEqn("123+23") → 146.0 
parseEqn("3+5") → 8.0 
parseEqn("3-5") → -2.0 

так вот вопрос ^^^^ и я думаю, что мне нужно сделать, это первое использовать строку токенизатор разбить строку, а затем преобразовать маркеры в парном разряде, а оттуда добавить или вычесть в зависимости от оператор ... но я не уверен ..

это то, что я до сих пор

public double parseEqn(String str) { 

StringTokenizer st = new StringTokenizer(str, "+-", true); 


String first= st.nextToken(); 
String op= st.nextToken(); 
String second= st.nextToken(); 

double num1 = Double.parseDouble(first); 

    double num2 = Double.parseDouble(second); 

if (op.equals("+")){ 
return num1+num2; 
} 
else (op.equals("-")){ 
return num1-num2; 
} 

я понятия не имею, хотя ....

ответ

0

Пишем выражение парсер не является тривиальным задача. Стандартным алгоритмом для разбора произвольных инфиксных выражений является shunting-yard algorithm. Идея состоит в том, чтобы пропустить каждый токен и создать выражение обратной польской нотации (RPN) из ввода. Выражение RPN - это, по сути, список операций на основе стека, который очень легко для компьютера работать (и легко писать код для оценки).