支架检查器

Bracket checker

所以这段代码应该接受用户输入并查看括号是否平衡。指令只是说使用while循环输入多行并打印"Exit program"。我的问题:我不确定如何在几行输入后跳出 while 循环,以便调用 sout("Exit program") - 其他一切正常。 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");
    }
}

你的 while 循环:

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

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

    }

会导致无限循环,如果你愿意,你可以让用户输入一个整数来表示他们想要输入的次数,比如

int amount = scanner.nextInt();

以及在 for 循环中使用金额。您也可以更改部分:

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

只是 return stack.isEmpty();

您需要定义某种停止命令,例如 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 方法结束时堆栈总是空的。

然后输入like

{{
{}
stop

将产生以下输出

Starting bracket checker app
Syntax error
Syntax correct
Exiting checker

但由于这是一项作业,您应该与您的导师或讲师核实您应该如何结束课程