Вводится символьная строка, в которой записано выражение со скобками трех типов: [], {} и (). Определить, верно ли расставлены скобки
Категория: Java
2012-03-02 16:29:08
(не обращая внимания на остальные символы)
Вывод:
Скобки расставлены правильно
Скобки расставлены неправильно
code: #java
import java.util.Stack; public class Exercise4 { private static final char rob = '('; private static final char rcb = ')'; private static final char sob = '['; private static final char scb = ']'; private static final char cob = '{'; private static final char ccb = '}'; public static boolean isCorrectBrackets(String value) { Stack<Character> stack = new Stack<Character>(); // создаем стек, куда будем помещать скобки char[] array = value.toCharArray(); // разбиваем строку на массив символов for(char c : array) { // для каждого символа в массиве if((c == rcb || c == scb || c == ccb) && stack.empty()) { // если символ является закрывающей скобкой И стек пустой return false; // сразу возвращаем false, т.к. закрывающая скобка не может идти первой } if(c == rob || c == sob || c == cob) { // если символ является открывающей скобкой, stack.push(c); // заталкиваем его в стек } if((c == rcb || c == scb || c == ccb) && !stack.empty()) { // если символ является закрывающей скобкой и стек НЕ пустой (т.е там уже находится одна или более открывающих скобок), char t = stack.peek(); // создаем временную переменную, в которую помещаем символ, находящийся "сверху" в стеке. Этот метоод не удаляет элемент из стека switch(c) { // оператором выбора определяем символ case ')': // если это закрывающая круглая скобка if(t == '(') stack.pop(); // если наверху стека находится открывающая круглая скобка, то удаляем ее из стека. Таким образом, как-бы отбрасываются корректные пары скобок break; case ']': // аналогично для других скобок if(t == '[') stack.pop(); break; case '}': if(t == '{') stack.pop(); break; } } } if(stack.empty()) { // если стек оказался пуст - значит у каждой скобки была своя корректная пара return true; } else { // если нет - значит скобки были расставлены неправильно return false; } } public static void main(String[] args) { // тестируем String example = "44*(55 - 1) + { 12 + [1;1] - x } / (54 +1)*2 = ?"; if(isCorrectBrackets(example)) { System.out.println("Скобки расставлены правильно"); } else { System.out.println("Скобки расставлены неправильно"); } example = "34 - [21;21(x+y]) + { 12 - 12 } "; if(isCorrectBrackets(example)) { System.out.println("Скобки расставлены правильно"); } else { System.out.println("Скобки расставлены неправильно"); } } }
автор: exiqa
Поделиться: