gpt4 book ai didi

java - 静态与非静态堆栈

转载 作者:行者123 更新时间:2023-11-30 07:26:00 34 4
gpt4 key购买 nike

我正在编写一个程序来检查另一个程序中的大括号是否平衡,但我在处理静态变量与非静态变量时遇到了问题。它说我无法从静态上下文引用我的非静态堆栈,但我正在读取文件,所以我必须更改堆栈。有什么建议么?谢谢!

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();
}

}

最佳答案

您的问题可能出在您未显示的代码行之一中。如果没有该代码,我无法确定。

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

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

这可能会解决问题,但您可能还有更多...再说一次,如果没有所有代码,我无法判断。

关于java - 静态与非静态堆栈,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36806399/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com