静态与非静态堆栈

时间:2016-04-23 03:45:04

标签: java stack

我制作了一个程序,用于检查大括号是否在另一个程序中平衡,并且我在静态变量和非静态变量方面遇到问题。它说我无法从静态上下文中引用我的非静态堆栈,但是我正在读取文件,因此我必须更改堆栈。有什么建议?谢谢!

public static void main(String[] args) 
{
    readFile();
    if(isBalanced() == true)
        System.out.println("program is balanced");
    else
        System.out.println("program is not balanced");
}

private static void readFile()
{
    try
    {
        Scanner fin = new Scanner(new File("test.txt"));

        while(fin.hasNext())
        {
            s.add(fin.nextLine());
            System.out.println("");
        }
    }catch(IOException ex)
    {
        System.out.println("File Not Found");
    }
}

public static boolean isBalanced()
{
    Stack<Character> stack = new Stack<Character>();

    for(int i = 0; i < s.length(); i++)
    {
        if(s.charAt(i) == LEFT_PARENT)
            stack.push(LEFT_PARENT);
        else if(s.charAt(i) == LEFT_BRACE)
            stack.push(LEFT_BRACE);
        else if(s.charAt(i) == LEFT_BRACKET)
            stack.push(LEFT_BRACKET);
        else if(s.charAt(i) == LEFT_POINT)
            stack.push(LEFT_POINT);
        else if(s.charAt(i) == RIGHT_PARENT)
        {
            if(stack.isEmpty())
                return false;
            if(stack.pop() != LEFT_PARENT)
                return false;
        }
        else if(s.charAt(i) == RIGHT_BRACE)
        {
            if(stack.isEmpty())
                return false;
            if(stack.pop() != LEFT_BRACE)
                return false;
        }
        else if(s.charAt(i) == RIGHT_BRACKET)
        {
            if(stack.isEmpty())
                return false;
            if(stack.pop() != LEFT_BRACKET)
                return false;
        }
        else if(s.charAt(i) == RIGHT_POINT)
        {
            if(stack.isEmpty())
                return false;
            if(stack.pop() != LEFT_POINT)
                return false;
        }
    }
    return stack.isEmpty();
}

}

1 个答案:

答案 0 :(得分:1)

您的问题可能出在您未展示的代码行之一。没有那段代码,我无法确定。

由于您使用变量“s”,但从未在您显示的代码中声明它,我认为它已在您的类中声明,并且它不是静态的。因此,您不能在静态方法中使用该变量(它们似乎都是这样)。

要么将该变量设为静态(这似乎是你为所有事情做的事情),要么你需要弄清楚如何从main方法实例化你的类。

这可能会解决问题,但你可能会有更多...再次,如果没有所有代码,我无法分辨。