Uebung 3 Loesung
parent
4b47525e95
commit
c398b5b5f8
|
|
@ -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;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -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 == '}');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -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];
|
||||||
|
}
|
||||||
|
}
|
||||||
Loading…
Reference in New Issue