Получение неверного вывода в тестовом примере в скобках Чеч в коде - PullRequest
0 голосов
/ 24 апреля 2020
boolean Match(char c) {
    if (this.type == '[' && c == ']')
        return true;
    if (this.type == '{' && c == '}')
        return true;
    if (this.type == '(' && c == ')')
        return true;
    return false;
}




    Stack<Bracket> opening_brackets_stack = new Stack<Bracket>();
    for (int position = 0; position < text.length(); ++position) 
    {
        char next = text.charAt(position);

        if (next == '(' || next == '[' || next == '{') 
        {
            // Process opening bracket, write your code here
            Bracket temp = new Bracket(next,position);
            opening_brackets_stack.push(temp);
        }

        if (next == ')' || next == ']' || next == '}') 
        {
            // Process closing bracket, write your code here
            try{
                Bracket item = opening_brackets_stack.pop();
                if(!item.Match(next)) 
                {  //not match
                    System.out.println(position+1);  
                    return;
                }
            }   
            catch(EmptyStackException e){}
        }
    }
    // Printing answer, write your code here
    try{
        if(opening_brackets_stack.isEmpty()) 
        {
          System.out.println("Success");
        }
        else {
            Bracket item = opening_brackets_stack.pop();
            //print position of first unmatched opening bracket
            System.out.println(item.position+1);
        }
    }
    catch (EmptyStackException e){}

}

Я получаю неправильный ответ в случаях, подобных "}", "()}", в которых скобка находится в последней позиции. я должен получить ответ «1», «3» соответственно для вышеупомянутых случаев, но я получаю «Успех». Во всех остальных случаях работает отлично. Что мне делать?

1 Ответ

1 голос
/ 25 апреля 2020

С помощью строки типа "}" ваш код пытается извлечь открывающую скобку из стека. Но стек пуст, поэтому вы получаете EmptyStackException, и управление передается вашему обработчику исключений. Что ничего не делает.

Вместо того, чтобы пытаться перехватить исключение, проверьте, пуст ли стек. Если это так, то вы знаете, что у вас слишком много закрывающих скобок. Относитесь к нему так же, как к ложному возврату от item.Match.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...