Mein Code konvertiert einen Infix-Ausdruck erfolgreich in einen Postfix-Ausdruck. Wenn ich jedoch eine Zahl einfüge, die mehr als 1 Ziffer ist (z. B. 546), erhält man keine Leerzeichen zwischen dieser Zahl und dem rechten Operanden.Fehlende Leerzeichen in der Postfix-Ausdrucksausgabe - Java
Ein Testlauf meines Code: Input: Geben Sie einen Ausdruck: (24/4)/(15/3) * 10-4 + 2 Output: Die Postfix Expression ist: 244/153// 10 * 4 - 2+
ich mag würde es der Postfix Ausdruck ist zu sein: 24 15.04 3// 10 * 4 - 2+
Dies ist mein Code: Bitte machen sie alle Änderungen, die mir erlauben, um Leerzeichen in die Ausgabe einzufügen.
import java.util.*;
public class PostfixConversion {
public static void main(String args[]) {
System.out.print("Enter an expression: ");
String infix = new Scanner(System.in).nextLine();
System.out.println(convertToPostfix(infix));
}
public static boolean precedence(char first, char second)
{
int v1 = 0, v2 = 0;
//find value for first
if(first == '-' || first == '+'){
v1 = 1;
}else if(first == '*' || first == '/'){
v1 = 2;
}//end if
//find value for second
if(second == '-' || second == '+'){
v2 = 1;
}else if(second == '*' || second == '/'){
v2 = 2;
}//end if
if(v1 < v2){
return false;
}//end if
return true;
}//end precedence method
//converts infix expression into postfix expression
public static String convertToPostfix(String infixExp)
{
String postFix = "The Postfix Expression is: ";
Stack<Character> stack = new Stack<Character>();
char character = ' ';
for(int i = 0; i < infixExp.length(); i++)
{
character = infixExp.charAt(i);
//determine if character is an operator
if(character == '*' || character == '-' || character == '/' || character == '+')
{
while(!stack.empty() && precedence(stack.peek(), character)){
postFix += stack.pop();
}//end while
stack.push(character);
}
else if(character == '(') //check for left parenthesis
{
stack.push(character);
}
else if (character == ')')
{
while(!stack.peek().equals('(') && !stack.isEmpty()){ //add characters until left parenthesis
postFix += stack.pop();
}//end while
if(!stack.isEmpty() && stack.peek().equals('(')){
stack.pop(); // pop/remove left parenthesis
}
}
else
{
postFix += character;
}//end if
}//end for
while(!stack.empty()) //add the remaining elements of stack to postfix expression
{
if(stack.peek().equals('('))
{
postFix = "There is no matching right parenthesis.";
return postFix;
}
postFix += stack.pop();
}
return postFix;
}//end convertToPo
}
[Was a Debugger und wie kann es mir helfen, Probleme zu diagnostizieren?] (https://stackoverflow.com/q/25385173/5221149) – Andreas
Suchen Sie einige vorhandene Implementierungen des Djkstra Rangierbahnhof-Algorithmus, um zu sehen, wie die 'precedence()' Methode sollte wirklich sein implementiert. Es ist nicht annähernd so kompliziert wie du es gemacht hast. – EJP