Yesver08

InfixToPostfix.java

Oct 8th, 2021
111
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 1.87 KB | None | 0 0
  1. package praktikum5;
  2.  
  3. /*
  4.     Infix: Bentuk yang udah kita ketahui -> 1 + 2 * (3 + 4)
  5.     Postfix: Operand (bilangan) didahulukan -> 1 2 + 3 *
  6.     Prefix: Kebalikan dari Postfix -> * 3 + 2 1
  7.  */
  8.  
  9. import java.util.Stack;
  10.  
  11. public class InfixToPostfix {
  12.     public static int urutan(char c) {
  13.         if (c == '^') return 3;
  14.         if (c == '*' || c == '/') return 2;
  15.         if (c == '+' || c == '-') return 1;
  16.         return 0;
  17.     }
  18.  
  19.     public static void main(String[] args) {
  20.         String input = "1+2*(3+4)";
  21.         char[] persamaan = input.toCharArray();
  22.  
  23.         String hasil = "";
  24.         Stack<Character> stack = new Stack<>();
  25.  
  26.         // 1. Jika char berupa angka, langsung push ke hasil akhir
  27.         // 2. Jika char berupa (, langsung push ke stack
  28.         // 3. Jika char berupa ), keluarin semua isi stack sampai ketemu (
  29.         // 4. Jika char berupa operator, maka:
  30.         //      keluarin semua isi stack sampai ketemu operator yang urutannya lebih tinggi
  31.         // Jika sudah selesai, maka: Keluarkan semua isi stack sampai habis
  32.  
  33.         for (int i = 0; i < persamaan.length; i++) {
  34.             char c = persamaan[i];
  35.             if (Character.isDigit(c)) {
  36.                 hasil += c;
  37.             }
  38.             else if (c == '(') {
  39.                 stack.push(c);
  40.             }
  41.             else if (c == ')') {
  42.                 while (true) {
  43.                     char s = stack.pop();
  44.                     if (s == '(') break;
  45.                     else hasil += s;
  46.                 }
  47.             }
  48.             else {
  49.                 while (!stack.isEmpty() && urutan(c) <= urutan(stack.peek())) {
  50.                     hasil += stack.pop();
  51.                 }
  52.                 stack.push(c);
  53.             }
  54.         }
  55.         while (!stack.isEmpty()) {
  56.             hasil += stack.pop();
  57.         }
  58.  
  59.         System.out.println(hasil);
  60.     }
  61. }
  62.  
Add Comment
Please, Sign In to add comment