带有堆栈实现的 Java Brackets 计数器 [关闭]

问题描述 投票:0回答:0

我的括号验证器总是将大小写显示为 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;
}
java stack counter brackets
© www.soinside.com 2019 - 2024. All rights reserved.