вот мой код который я написал по видео import java.util.ArrayDeque;
import java.util.Stack;
// import static jdk.internal.joptsimple.util.RegexMatcher.regex;
public class Parsert {
public static void main(String[] args) {
String formula = "(100-50)/5";
//распарсим строку регулярным выражением
//распарсим на границах разных символов \\d
//formula.split(regex"\\d")
//System.out.print(Arrays.toString(formula.split("\\b")));
System.out.println(getPolandNotation(formula));
}
private static ArrayDeque<String> getPolandNotation(String text) {
ArrayDeque<String> box1 = new ArrayDeque<>();
Stack<String> box2 = new Stack<>();
char symbol;
String temp = new String();
for (int i = 0; i < text.length(); i += 1) {
symbol = text.charAt(i);
//проверить является считанный символ числом
if (Character.isDigit(symbol)) {
/*чтоб поместить в стек не 1 и 0 и 0 а сразу 100 надо сначала дописать String temp;
и в этую перемнную слаживать считанное
что б оно само преобразовало входящие символы в строку String.valueOf(symbol);
*/
temp += String.valueOf(symbol);
//поверяю я вконце строки или нет или я считываю следующий символ
if (i == text.length() - 1 !Character.isDigit(text.charAt(i + 1))) {
box1.add(temp);
temp = "";
//теперь проверим является ли считанный символ математическим знаком
} else if (isMathSymol(symbol)) {
if (getPriuority(symbol) == 1) {
//temp = "";
box2.push(String.valueOf(symbol));
} else if (getPriuority(symbol) > 1) {
// temp = "";
//если второй стек не пустой
while (box2.size() != 0) {
//анализ приоритета после считывания из стека
if (getPriuority(box2.peek().charAt(0)) >= getPriuority(symbol)) {
//взял из одного стека вырезал и в другой вставил
box1.add(box2.pop());
} else
break;
}
box2.push(String.valueOf(symbol));
//а если мы считали не символ а открывающуюся скобку
} else if (getPriuority(symbol) == -1) {
while (getPriuority(box2.peek().charAt(0)) != 1) {
box1.add(box2.pop());
}
// или убрать комент box2.pop();
box2.pop();
}
// вот это где ему место?
}
}
}
while (!box2.isEmpty()) {
box1.add(box2.pop());
}
return box1;
}
//анализируем: мы считали число или что то другое
private static boolean isDigit(char c){
if (c>= '0' && c<='9'){
return true;
}
return false;
}
private static boolean isMathSymol(char c) {
if (c == '(' c == ')' c == '-' c == '+' c == '/' c == '*' ){
return true;
}
return false;
}
private static int getPriuority (char c){
if (c == '/' c == '*') {
return 3;
} else if (c == '-' c == '+') {
return 2;
} else if (c == '(') {
return 1;
} else if (c == ')') {
return -1;
}
return 0;
// в место возврата нуля если нето ввели надо сюда вставить какое то исключение
}
}
Дебаг наше все.
Ну и куски кода кидать нужно через всякие pastebin
Шурок
Михаил
SSS
Алексей
Ol
Dima
.
A.
Тёма
Agent_RBY_
вова
Igor
Vladimir
Идущий к мечте
Charlie
Лирик