Я пишу этот блок кода для преобразования инфикса в префикс, но я не получаю никакого вывода, что я могу сделать?
, когда последний раз во время работы он попадает в бесконечный цикл, а условия if этого не делаютпроцесс в чем проблема?
static String infixToPrefix(String infix){
for (int j = 0; j < infix.length(); j++){
if (infix.charAt(j) == 's' && infix.charAt(j + 1) == 'i' && infix.charAt(j + 2) == 'n'){
infix = infix.replace("sin","S");
break;
}
else if (infix.charAt(j) == 'c' && infix.charAt(j + 1) == 'o' && infix.charAt(j + 2) == 's' ){
infix = infix.replace("cos", "C");
break;
}
else if (infix.charAt(j) == 't' && infix.charAt(j + 1) == 'a' && infix.charAt(j + 2) == 'n' ) {
infix = infix.replace("tan", "T");
break;
}
else if (infix.charAt(j) == 'l' && infix.charAt(j + 1) == 'o' && infix.charAt(j + 2) == 'g' ) {
infix = infix.replace("log", "L");
break;
}
}
Stack<String> operators = new Stack<>();
Stack<String> operands = new Stack<>();
String[] exp = infix.split("");
for (int i = 0; i < exp.length; i++) {
if (exp[i].equals("(")) {
operators.push(exp[i]);
}
else if (exp[i].equals(")")) {
while (!operators.isEmpty() && !operators.getTop().equals("(")) {
if (isMultiOperator(operators.getTop())){
String op1 = operands.getTop();
operands.pop();
String op2 = operands.getTop();
operands.pop();
String op3 = operators.getTop();
operators.pop();
String temp = op3 + op2 + op1;
operands.push(temp);
}
else if(isUnaryOperator(operators.getTop())){
String op1 = operands.getTop();
operands.pop();
String op2 = operators.getTop();
operators.pop();
String temp = op2 + op1;
operands.push(temp);
}
}
operators.pop();
}
else if (isMultiOperator(exp[i]) || isUnaryOperator(exp[i])){
while (!(operators.isEmpty()) && precedence(exp[i]) <= precedence(operators.getTop())) {
if (isMultiOperator(operators.getTop())){
String op1 = operands.getTop();
operands.pop();
String op2 = operands.getTop();
operands.pop();
String op3 = operators.getTop();
operators.pop();
String temp = op3 + op2 + op1;
operands.push(temp);
}
else if (isUnaryOperator(operators.getTop())){
String op1 = operands.getTop();
operands.pop();
String op2 = operators.getTop();
operators.pop();
String temp = op2 + op1;
}
}
operators.push(exp[i] + " ");
}
else if (Character.isLetterOrDigit(infix.charAt(i))){
boolean haveDot = exp[i].equals(".");
String temp = haveDot ? "0." : exp[i];
while ((i + 1) < exp.length && (Character.isLetterOrDigit(infix.charAt(i + 1)) || exp[i + 1].equals("."))) {
temp += exp[i + 1];
i++;
}
operands.push(temp + " ");
}
}
while (!operators.isEmpty()){
if (isMultiOperator(operators.getTop())){
String op1 = operands.getTop();
operands.pop();
String op2 = operands.getTop();
operands.pop();
String op3 = operators.getTop();
operators.pop();
String temp = op3 + op2 + op1;
operands.push(temp);
}
else if (isUnaryOperator(operators.getTop())){
String op1 = operands.getTop();
operands.pop();
String op2 = operators.getTop();
operators.pop();
String temp = op2 + op1;
operands.push(temp);
}
}
return operands.getTop() ;
}
Я пишу этот блок кода для преобразования инфикса в префикс, но у меня нет вывода, что я могу сделать? когда последний во время работы попадает в бесконечный цикл и условия if не обрабатываются, в чем проблема?