我的括号验证器总是将大小写显示为 openBracketsCounter == closedBracketsCounter 连我都知道这不是真的。 这是我的 BracketsValidator 代码:
import java.io.FileInputStream;
import java.util.EmptyStackException;
import java.util.Scanner;
public class BracketsValidator {
private TStack<String> dataStack;
public BracketsValidator() {
this.dataStack = new TStack<>();
}
public boolean readText(String filename){
try(FileInputStream fin = new FileInputStream(filename)){
Scanner sc = new Scanner(fin);
while(sc.hasNext()){
String next = sc.next();
dataStack.push(next);
}
}catch(Exception e){
return false;
}
return true;
}
public boolean Validate(String filename){
boolean ok = readText(filename);
int openBracketsCounter = 0;
int closedBracketsCounter =0;
if(ok){
while(!dataStack.isEmpty()){
String current = dataStack.pop();
if(current.equals("(")||current.equals("[")||current.equals("{")){
openBracketsCounter++;
} else if (current.equals(")")||current.equals("]")||current.equals("}")){
closedBracketsCounter++;
}
}
if(openBracketsCounter==closedBracketsCounter){
System.out.println("Ok,brackets are correct!");
return true;
}else{
System.out.println("Error! Brackets are incorrect!");
return false;
}
}
return false;
}
}
我的检查员
public class BracketsChecker {
public static void main(String[] args) {
BracketsValidator bv = new BracketsValidator();
bv.Validate("D:\\CodeProjects\\DataStructures\\DataStructuresJava\\Stack03_04\\src\\inventory.txt");
BracketsValidator bv1 = new BracketsValidator();
bv1.Validate("D:\\CodeProjects\\DataStructures\\DataStructuresJava\\Stack03_04\\src\\brackets.txt");
BracketsValidator bv2 = new BracketsValidator();
bv2.Validate("D:\\CodeProjects\\DataStructures\\DataStructuresJava\\Stack03_04\\src\\csharp.cs");
BracketsValidator bv3 = new BracketsValidator();
bv3.Validate("D:\\CodeProjects\\DataStructures\\DataStructuresJava\\Stack03_04\\src\\cplusplus.cpp");
}
}
我试图将那些 if 语句移到 while 循环之外 我也知道我的 TStack 实现是有效的。
编辑已解决 我不得不更改 readText 方法以将每个字符推入堆栈
public boolean readText(String filename){
try(FileInputStream fin = new FileInputStream(filename)){
Scanner sc = new Scanner(fin);
while(sc.hasNext()){
String next = sc.next();
for(int i =0;i<next.length();i++){
char c = next.charAt(i);
dataStack.push(String.valueOf(c));
}
}
}catch(Exception e){
return false;
}
return true;
}