Ошибка в aлгоритме правильности расстановки скобок - Java
у меня есть код с алгоритмом проверки правильности написания скобок одного вида, который я посмотрел здесь - ссылка, и я пытаюсь сделать то же в Джаве, но у меня получается другой результат в итоге.
public void naStos (String wyraz) {
boolean ok = true;
int counter = 0;
for (int i = 0; i < wyraz.length(); i++) {
if (wyraz.charAt(i) == '(')
counter++;
if (wyraz.charAt(i) == ')') {
if (counter == 0)
ok = false;
counter--;
}
}
System.out.println(counter);
if (counter == 0)
ok = true;
if (ok) {
System.out.println("Ok");
} else {
throw new IllegalArgumentException("Bledne sparowanie nawiasow w wyrazeniu: " + wyraz);
}
}
Когда я ввожу например ( то получаю Ок, почему так?
Ответы (2 шт):
Автор решения: Roman Konoval
→ Ссылка
Как минимум нужно заменить:
if (counter == 0)
ok = true;
на
ok = counter == 0;
Потому как сейчас у вас на ( будет counter == 1 то есть открыли скобку, но не закрыли, но при этом ok == True, а это не правильно.
Автор решения: tym32167
→ Ссылка
замените
if (counter == 0)
ok = true;
на
if (counter != 0)
ok = false;
Ваш флаг ok равен true изначально, потому нет смысла его ешё раз в true выставлять. Зато если вы где то его уже выставили в false, то ваш код перетирает сейчас это.