Ich versuche, ein Postfix in ein Infix umzuwandeln. Ich habe einen Code, aber ich kann ihn nicht beheben. Es kann eine Bedingung geben, die ich vermisse. Oder meine Struktur ist nicht ganz richtig. Auch da ich neu in Java bin, brauche ich vielleicht Hilfe mit "Stack<Character>
".Postfix zu Infix
public static String postfixToInfix(String postfix) {
Stack<Character> stack = new Stack();
Stack<Character> backup = new Stack();
StringBuilder infix = new StringBuilder(postfix.length());
infix.append('(');
for (int i = 0; i < postfix.length(); i++) {
if (!isOperator(postfix.charAt(i))) {
stack.push(postfix.charAt(i));
} else {
if (stack.size() == 1) { //stack is 1
backup.push(postfix.charAt(i));
}
if (stack.size() == 0 && backup.size()%5 == 0) { //stack is 0
stack.push(backup.pop());
stack.push(backup.pop());
stack.push(backup.pop());
stack.push(backup.pop());
stack.push(backup.pop());
stack.push(postfix.charAt(i));
}
if (stack.size() >= 2) { //stack is > 1
char arg2 = stack.pop();
char arg1 = stack.pop();
backup.push(')');
backup.push(arg2);
backup.push(postfix.charAt(i));
backup.push(arg1);
backup.push('(');
}
}
}
while (!backup.empty()) { //only size 3
stack.push(backup.pop());
}
while (!stack.empty()) { //only size 3
backup.push(stack.pop());
}
while (!backup.isEmpty()) {
infix.append(backup.pop());
}
infix.append(')');
return infix.toString();
}
private static boolean isOperator(char c) {
return c == '+' || c == '-' || c == '*' || c == '/' || c == '^' || c == '(' || c == ')';
}
public static void main(String[] args) {
String infix1 = "(3-(7*2))";
String postfix1 = "372*-";
String infix2 = "((7+1)*((3-6)*(5-2)))";
String postfix2 = "71+36-52-**";
System.out.println(" postfix1: " + postfix1);
s = postfixToInfix(postfix1);
System.out.println("postfixToInfix(postfix1): " + s);
if (s.equals(infix1)) {
System.out.println(" Korrekt!");
} else {
System.out.println(" Nicht korrekt!");
}
System.out.println();
System.out.println(" postfix2: " + postfix2);
s = postfixToInfix(postfix2);
System.out.println("postfixToInfix(postfix2): " + s);
if (s.equals(infix2)) {
System.out.println(" Korrekt!");
} else {
System.out.println(" Nicht korrekt!");
}
System.out.println();
}
}
Ausgabe
postfix1: 372*-
postfixToInfix(postfix1): (3-(7*2))
Korrekt!
postfix2: 71+36-52-**
postfixToInfix(postfix2): ((5(-*2)()**)(3-6)(7+1))
Nicht korrekt!
Process finished with exit code 0
Also im Grunde, Ihr Code verhält sich nicht so, wie Sie es erwarten sollten, und Sie haben keine Ahnung warum. In dieser Situation müssen Sie ein Debugging durchführen, am besten mit einem Debugger, oder wenn Sie möchten, mit vielen println-Anweisungen, die im gesamten Code verstreut sind, aber der Schlüssel ist, dass Sie den Status Ihrer Schlüsselvariablen als Code kennen müssen läuft, um dir einen Hinweis darauf zu geben, was falsch sein könnte. –
Ich habe debuggen. Im Grunde sitze ich zwei Tage hier und möchte weiter gehen, weil ich zwei andere Aufgaben habe. Ich habe dies auch als Pseudo-Code geschrieben, um die Probleme mit Java selbst zu vermeiden. Nichts half bisher. – LSR
Wenn Sie Fehler behoben haben, zeigen Sie bitte die Früchte dieser Bemühungen. Wie geschrieben, befürchte ich, dass Ihre Frage zu vage und zu weit gefasst ist und die Gefahr besteht, dass sie geschlossen wird. –