Кронштейн проверки - PullRequest
0 голосов
/ 21 апреля 2020

Так что этот код должен принимать пользовательский ввод и видеть, сбалансированы ли скобки. Инструкции просто говорят, что используйте while l oop для ввода нескольких строк и выведите «Exit program». Мой вопрос: я не уверен, как выйти из условия l oop после нескольких строк ввода, чтобы вызывался sout («Программа выхода») - все остальное работает нормально. PS. все еще очень новичок в этом

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

public class BracketChecker {
    private Stack<Character> stack = new Stack<>();

    public boolean check(String text) {
        for (int i = 0; i < text.length(); i++){
            char c = text.charAt(i);
            if (c == '{') {
                stack.push(c);
            }

            if (c == '}'){
                if (stack.empty())
                    return false;
                stack.pop();
            }
        }

        if (stack.isEmpty()){
            return true;
        }
        else{
            return false;
        }

    }

    public static void main(String[] args) {
        System.out.println("Starting bracket checker app");
        BracketChecker checker = new BracketChecker();
        Scanner in = new Scanner(System.in);
        String temp;
        while(in.hasNextLine()) {
            temp = in.nextLine();

            if (checker.check(temp)) {
                System.out.println("Syntax correct");
            } else {
                System.out.println("Syntax error");
            }

        }

        System.out.println("Exiting checker");
    }
}

Ответы [ 2 ]

0 голосов
/ 21 апреля 2020

Вам необходимо определить некоторую команду остановки, например, stop, затем проверьте, прочитали ли вы эту команду, и если да, завершите программу:

while(in.hasNextLine()) {
    temp = in.nextLine();

    if ("stop".equals(temp)) {
        System.out.println("Exiting checker");
        return;
    }

    if (checker.check(temp)) {
        System.out.println("Syntax correct");
    } else {
        System.out.println("Syntax error");
    }
}

System.out.println("Error");

вам также потребуется изменить последнюю часть check метод:

if (stack.isEmpty()){
    return true;
}
else{
    stack.clear();
    return false;
}

таким образом, стек всегда пуст в конце метода check.

Затем вводится как

{{
{}
stop

выполните следующий вывод

Starting bracket checker app
Syntax error
Syntax correct
Exiting checker

Но поскольку это задание, вы должны уточнить у своего преподавателя или лектора, как вы должны завершить программу

0 голосов
/ 21 апреля 2020

Ваше время l oop:

 while(in.hasNextLine()) {
        temp = in.nextLine();

        if (checker.check(temp)) {
            System.out.println("Syntax correct");
        } else {
            System.out.println("Syntax error");
        }

    }

приведет к бесконечному l oop, если вы хотите, чтобы пользователь мог вводить целое число раз, которое они хотят ввести как

int amount = scanner.nextInt();

и использование суммы в a для l oop. Также вы можете изменить часть:

if (stack.isEmpty()){
        return true;
    }
    else{
        return false;
    }

, чтобы она просто возвращалась stack.isEmpty ();

...