Стек символов для проверки соответствия скобок не содержит ошибок, но, похоже, ничего не делает - PullRequest
0 голосов
/ 28 августа 2018

Я потратил полгода на программирование, и теперь я просто освежаю свою память с помощью супер базовых небольших вопросов для интервью ... и я застрял на 2 дня на первом ... Ниже мой код, может кто-то просто намекнуть мне почему программа не показывает ошибок но при компиляции ничего не делает? Он должен игнорировать текстовые символы, но я даже не там

public class bracketCheck {

public static void main(String[] args) {


Stack <Character> s = new <Character> Stack(); 
Scanner input = new Scanner(System.in);
String buff; 

System.out.println("please enter brackets & text");
buff = input.nextLine(); 
input.close();
int count = 0;
boolean cont = true;
Character stackTop;
Character current = buff.charAt(count);
do {
    if(current == ')' || current== '}' || current== ']') {
        s.push(current);
        count++;
    }
    else if(current== '(' || current== '{' || current== '[') {
        stackTop = s.pop();
        cont = match(stackTop, current);    
    }
}
while(s.isEmpty() == false /*&& cont =true*/); 
if(s.isEmpty())
    System.out.println("bout time......");

}

private static boolean match(Character top , Character not) {
    if(top == ')' && not == '(') 
        return true;
    else if(top == ']' && not == '[') 
        return true;
    else if(top == '}' && not == '{') 
        return true;
    else 
        return false;
}

}

1 Ответ

0 голосов
/ 28 августа 2018

Я видел некоторые проблемы в вашем коде, это моя исправленная версия

import java.util.Scanner;
import java.util.Stack;

// use Capital letters in the beginning of class names
public class BracketCheck {
    public static void main(String[] args) {

        Stack<Character> stack = new Stack<>();
        Scanner input = new Scanner(System.in);
        String buff;

        System.out.println("please enter brackets & text");
        buff = input.nextLine();
        input.close();
        // using java8 makes iterating over the characters of a string easier
        buff.chars().forEach(current -> {
            // if <current> is an opening bracket, push it to stack
            if (current == '(' || current == '{' || current == '[') {
                stack.push((char) current);
            }
            // if <current> is a closing bracket, make sure it is matching an opening
            // bracket or alert and return
            else if (current == ')' || current == '}' || current == ']') {
                if (!match(stack, (char) current)) {
                    System.out.println("no good");
                    return;
                }
            }
        });
        // if, after we finished iterating the string, stack is empty, all opening
        // brackets had matching closing brackets
        if (stack.isEmpty()) {
            System.out.println("bout time......");
        }
        // otherwise, alert
        else {
            System.out.println("woah");
        }
    }

    private static boolean match(Stack<Character> stack, Character closer) {
        // if stack is empty, the closer has no matching opener
        if (stack.isEmpty()) {
            return false;
        } else {
            // get the most recent opener and verify it matches the closer
            Character opener = stack.pop();
            if (opener == '(' && closer == ')')
                return true;
            else if (opener == '[' && closer == ']')
                return true;
            else if (opener == '{' && closer == '}')
                return true;
            else
                return false;
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...