支架检查器
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
但由于这是一项作业,您应该与您的导师或讲师核实您应该如何结束课程
所以这段代码应该接受用户输入并查看括号是否平衡。指令只是说使用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
但由于这是一项作业,您应该与您的导师或讲师核实您应该如何结束课程