public static void main(String[] args) {
Stack<Character> operators = new Stack();
HashMap<Character, Integer> compare = new HashMap<Character, Integer>();
compare.put('-',1);
compare.put('+',1);
compare.put('*',2);
compare.put('/',2);
compare.put('(', 3);
compare.put('{', 3);
HashMap<Integer, String> errorMsg = new HashMap<Integer, String>();
errorMsg.put(0, "bracket does not match");
errorMsg.put(1, "parathenses does not match");
errorMsg.put(2, "order of brackets and paranthese is mixed");
errorMsg.put(3, "please hardcode an input");
String[] Statement = new String[5];
Statement[0] = "(1-1)";
Statement[1] = "(2+3)";
Statement[2] = "(3*9) {2+4}";
Statement[3] = "(2*(3*6)}";
Statement[4] = "{34*(26)+10-3}";
for (Integer i = 0; i <= 4; i++) {
String postt = "";
if(Statement[i]!=null) {
String expression = Statement[i];
boolean correct = true;
System.out.println("expression" + (i +1));
for (Integer j = 0; j < expression.length() && correct ; j++) {
char c = expression.charAt(j);
if (c >= '0' && c <= '9') {
postt +=c;
}
if (c == '+' || c == '-' || c == '*' || c == '/' || c == '(' || c == '{' ) {
operators.push(c);
}
if(c == ')' || c == '}') {
while(!operators.isEmpty()) {
char op = operators.pop();
if(op == '(' || op == '{' ) {
break;
}
postt += op;
}
}
}
}
System.out.println(postt);
}
}
Это не полное решение, я изменил его для печати постфикса выражения. Я использовал класс Stack lib. Вы можете обновить по своему выбору. Только что обновлено поверх вашей реализации. Это поможет вам лучше развиваться. Может быть, использование может решить проблемы таким образом.
- понять проблему.
- написать контрольные примеры
- напишите свою логику на бумаге.
- подтвердите ваши контрольные примеры вашей логикой.
- преобразовать его в код.