diff --git a/src/main/java/Uebung3_Andres/ExpressionChecker.java b/src/main/java/Uebung3_Andres/ExpressionChecker.java new file mode 100644 index 0000000..305573c --- /dev/null +++ b/src/main/java/Uebung3_Andres/ExpressionChecker.java @@ -0,0 +1,44 @@ +package Uebung3_Andres; + +import java.util.Scanner; + +public class ExpressionChecker { + + private static Stack stack; + + public static void main(String[] args) { + Scanner scanner = new Scanner(System.in); + System.out.println("Please enter your expression:"); + + char[] input = scanner.nextLine().toCharArray(); + stack = new Stack(input.length); + scanner.close(); + boolean isValidExpression = true; + for (char letter: input) { + if (isOpenBracket(letter)) { + stack.push(letter); + continue; + } + if (isClosingBracket(letter) && !isClosingBracketComplete(letter)) { + isValidExpression = false; + break; + } + } + //If stack is not empty -> expression was not fully closed = invalid. Ex: ()[ + isValidExpression = isValidExpression && stack.pop() == '\0'; + System.out.println(isValidExpression ? "Gültig" : "Klammern ungültig"); + } + + private static boolean isOpenBracket(char letter) { + return letter == '{' || letter == '[' || letter == '('; + } + + private static boolean isClosingBracket(char letter) { + return letter == '}' || letter == ']' || letter == ')'; + } + + private static boolean isClosingBracketComplete(char letter) { + int diff = (int) letter - (int) stack.pop(); + return diff == 1 || diff == 2; + } +} diff --git a/src/main/java/Uebung3_Andres/ExpressionCheckerV2.java b/src/main/java/Uebung3_Andres/ExpressionCheckerV2.java new file mode 100644 index 0000000..3315ae3 --- /dev/null +++ b/src/main/java/Uebung3_Andres/ExpressionCheckerV2.java @@ -0,0 +1,46 @@ +package Uebung3_Andres; + +import java.util.Scanner; + +public class ExpressionCheckerV2 { + + private static Stack stack; + + public static void main(String[] args) { + Scanner scanner = new Scanner(System.in); + System.out.println("Please enter your expression:"); + + char[] input = scanner.nextLine().toCharArray(); + stack = new Stack(input.length); + scanner.close(); + boolean isValidExpression = true; + for (char letter: input) { + if (isOpenBracket(letter)) { + stack.push(letter); + continue; + } + if (isClosingBracket(letter) && !isClosingBracketComplete(letter)) { + isValidExpression = false; + break; + } + } + //If stack is not empty -> exp was not closed = invalid + isValidExpression = isValidExpression && stack.pop() == '\0'; + System.out.println(isValidExpression ? "Gültig" : "Klammern ungültig"); + } + + private static boolean isOpenBracket(char letter) { + return letter == '{' || letter == '[' || letter == '('; + } + + private static boolean isClosingBracket(char letter) { + return letter == '}' || letter == ']' || letter == ')'; + } + + private static boolean isClosingBracketComplete(char closeBracket) { + char openBracket = stack.pop(); + return (openBracket == '(' && closeBracket == ')') || + (openBracket == '[' && closeBracket == ']') || + (openBracket == '{' && closeBracket == '}'); + } +} diff --git a/src/main/java/Uebung3_Andres/Stack.java b/src/main/java/Uebung3_Andres/Stack.java new file mode 100644 index 0000000..10c0079 --- /dev/null +++ b/src/main/java/Uebung3_Andres/Stack.java @@ -0,0 +1,21 @@ +package Uebung3_Andres; + +public class Stack { + + private char[] stack; + private int pointer; + + public Stack(int size) { + stack = new char[size]; + pointer = 0; + } + + public void push(char c) { + stack[pointer++] = c; + } + + public char pop() { + if (pointer == 0) return '\0'; + return stack[--pointer]; + } +}