它一直显示空指针以及数组超出范围的异常:
public class Intopost {
int top = -1;
public void intopost() {
int i;
Stack stack = new Stack(20);
String s1 = "b*b-4*m*c";
String s2 = " ";
int top = -1;
System.out.println("your infix string is" + s1);
for (i = 0; i < s1.length(); i++) {
if (s1.charAt(i) == '*' || s1.charAt(i) == '-') {
if (top == -1) {
stack.push(s1.charAt(i));
top++;
} else {
if (stack.peek() == '*' && s1.charAt(i) == '-') {
while (top != -1) {
s2 += stack.pop();
}
top = -1;
} else {
}
stack.push(s1.charAt(i));
}
if (i == (s1.length() - 1)) {
while (top != -1) {
s2 += stack.pop();
}
top = -1;
}
} else {
s2 += s1.charAt(i);
if (i == (s1.length() - 1)) {
while (top != -1) {
s2 += stack.pop();
}
top = -1;
}
}
}
System.out.print("the postfix string is" + s2);
}
public static void main(String args[]) throws IOException {
Intopost in = new Intopost();
in.intopost();
}
class Stack {
int maxSize;
char[] sa;
public Stack(int max) {
maxSize = max;
sa = new char[maxSize];
top = -1;
}
public void push(char a) {
sa[++top] = a;
}
public char pop() {
return sa[top--];
}
public char peek() {
return sa[top];
}
}
}
你能告诉我这里的错误是什么导致我在这个程序中一直给出null异常错误?
答案 0 :(得分:0)
你有多个增加和减少顶部的问题,你显然用它来查看你在堆栈中的位置。你在你创建的堆栈中也有顶部,它在那里看起来是正确的,但在你的其他代码中,你正在检查从未在以下地方检查的本地顶部:
while(top!=-1) {
s2+=stack.pop();
}
答案 1 :(得分:0)
我仍然不明白为什么要实现自己的堆栈。如果您打算继续使用堆栈实现,它应该像语言提供的堆栈一样,如果您调用pop并且堆栈为空(即top
是负值),则抛出异常。
public char pop() {
if (top >= 0) {
return sa[top--];
}
throw new EmptyStackException();
}
我强烈建议您使用Stack类 http://docs.oracle.com/javase/7/docs/api/java/util/Stack.html或者至少实施你的行为方式。