Ошибка в 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, то ваш код перетирает сейчас это.

→ Ссылка