Форум программистов, компьютерный форум, киберфорум
Java SE (J2SE)
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
 Аватар для иван я
17 / 17 / 16
Регистрация: 15.12.2012
Сообщений: 536

Вывести сообщение какой скобки не хватает

16.09.2015, 20:40. Показов 1007. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Нужно вывести сообщение какая скобка закрыта или не закрыта.
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
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 = "";
                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("Скобки расставлены неправильно");
                }
 
        }
 
}
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
16.09.2015, 20:40
Ответы с готовыми решениями:

Дана строка, содержащая латинские буквы и круглые скобки. Если скобки расставлены правильно, то вывести число
Дана строка, содержащая латинские буквы и круглые скобки. Если скобки расставлены правильно, то вывести число 0. Если нет, то вывести -1.

Выходит ошибка 89 - что не хватает скобки
unit MBMData; interface type TSost = (Vvod, Avto, Demo, Takt, Cmnd); const { sostojanie modeli } Sost: TSost = Vvod;...

на предпоследней строке мне выдает 89 ошибку, что не хватает скобки...хотя вроде всё на месте
{$N+,E+} program P6; uses crt; function f(x: double): double; begin f:=x*Arctan(x) end; function IntegralRect: double; var...

5
Эксперт Java
 Аватар для turbanoff
4094 / 3828 / 745
Регистрация: 18.05.2010
Сообщений: 9,331
Записей в блоге: 12
16.09.2015, 22:15
Не до конца понятно задание.
Вот подали на вход:
Java
1
{{}}
Что именно программа должна вывести?
А в этом случае?
Java
1
{}}
0
 Аватар для иван я
17 / 17 / 16
Регистрация: 15.12.2012
Сообщений: 536
17.09.2015, 06:15  [ТС]
turbanoff, Скобки расставлены некорректно, не хватает '{' скобки. Что то типо того
0
636 / 528 / 165
Регистрация: 01.04.2010
Сообщений: 1,843
17.09.2015, 06:20
Нафиг стэк.

Тебе нужна мапа, где ключ - открывающая скобка, значение - их количество. Соответственно, при нахождении открывающей скобки инкрементишь значение, закрывающей - декрементишь. Чтобы обработать ситуацию вида "([)]" просто хранишь последнее значение открываеющей скобки. На выходе все Map.Entry, содержащие ненулевое значение, в ключе хранят какая скобка не закрыта.
0
 Аватар для иван я
17 / 17 / 16
Регистрация: 15.12.2012
Сообщений: 536
17.09.2015, 07:17  [ТС]
aleksandy, А если например будет вот такая ситуация ({)?

Добавлено через 4 минуты
aleksandy, Под словом мапа вы подразумеваете HashMap?
0
636 / 528 / 165
Регистрация: 01.04.2010
Сообщений: 1,843
17.09.2015, 07:29
Цитата Сообщение от иван я Посмотреть сообщение
ситуация ({)
Монопенисуально.

Цитата Сообщение от иван я Посмотреть сообщение
Под словом мапа
Я подразумеваю любую имплементацию интерфейса.

Добавлено через 9 минут
Цитата Сообщение от aleksandy Посмотреть сообщение
Нафиг стэк.
Поправка. Если не падать на первой попавшейся неправильной скобке, то стек нужен для хранения последовательности скобок.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
17.09.2015, 07:29
Помогаю со студенческими работами здесь

Дана строка, содержащая латинские буквы и скобки. Если скобки расставлены правильно - вывести 0. Иначе - номер позиции, где есть ошибочная скобка
Дана строка, содержащая латинские буквы и круглые скобки. Если скобки расставлены правильно (то есть каждой открывающей соответству-ет одна...

Выводится сообщение о том, что не хватает памяти, хотя памяти хватает
Файлы подкачки отключил и включать не собираюсь. Когда свободной памяти остаётся примерно гиг-полтора начинают &quot;помирать&quot;...

Какой библиотеки не хватает для работы функции sound()
#include&lt;conio.h&gt; // какой библиотеки нехватает, чтобы интерпретатор не указывал ошибку на sound void interrupt (*SvInt09)(void); /*...

Какой ссылки не хватает в проекте для работы приведенного кода
Вот все ссылки, используемые в проекте: Microsoft.DirectX Microsoft.DirectX.Direct3D Microsoft.DirectX.Direct3DX ...

Какой формулы не хватает, чтобы образовалось правило Modus Ponens
Здравствуйте! Помогите пожалуйста. Какой формулы не хватает, чтобы образовалось правило Modus Ponens: F\rightarrow (H\rightarrow...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
Midnight Chicago Blues
kumehtar 24.03.2026
Такой Midnight Chicago Blues, знаешь?. . Когда вечерние улицы становятся ночными, а ты не можешь уснуть. Ты идёшь в любимый старый бар, и бармен наливает тебе виски. Ты смотришь на пролетающие. . .
Контроль уникальности заводского номера - вариант №2
Maks 24.03.2026
В отличие от предыдущего варианта добавлено прерывание циклов, также добавлены новые переменные для сохранения контекста ошибки перед прерыванием цикла: Процедура ПередЗаписью(Отказ, РежимЗаписи,. . .
SDL3 для Desktop (MinGW): Вывод текста со шрифтом TTF с помощью библиотеки SDL3_ttf на Си и C++
8Observer8 24.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-text-sdl3-c. zip finish-text-sdl3-cpp. zip
Жизнь в неопределённости
kumehtar 23.03.2026
Жизнь — это постоянное существование в неопределённости. Например, даже если у тебя есть список дел, невозможно дойти до точки, где всё окончательно завершено и больше ничего не осталось. В принципе,. . .
Модель здравоСохранения: работники работают быстрее после её введения.
anaschu 23.03.2026
geJalZw1fLo Корпорация до введения программа здравоохранения имела много невыполненных работниками заданий, после введения программы количество заданий выросло. Но на выплатах по больничным это. . .
Контроль уникальности заводского номера - вариант №1
Maks 23.03.2026
Алгоритм контроля уникальности заводского (или серийного) номера на примере документа выдачи шин для спецтехники с табличной частью в КА2. Данные берутся из регистра сведений, по которому настроено. . .
Хочу заставить корпорации вкладываться в здоровье сотрудников: делаю мат модель здравосохранения
anaschu 22.03.2026
e7EYtONaj8Y Z4Tv2zpXVVo https:/ / github. com/ shumilovas/ med2. git
Программный отбор элементов справочника по группе
Maks 22.03.2026
Установка программного отбора элементов справочника "Номенклатура" из модуля формы документа в КА2. В качестве фильтра для отбора справочника служит группа номенклатуры. Отбор по наименованию. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru