
java栈为什么插入栈的时候空指针错误
importjava.util.Scanner;publicclassArrayStack{privatestaticObject[]stackArray;private...
import java.util.Scanner;
public class ArrayStack {
private static Object[] stackArray;
private static int top;
private int bottom;
final int minSize=10;
private static String answer=null;
private static String s;
public ArrayStack(){
top=-1;
stackArray=new Object[minSize];
}
public static void push(String j){
if(top==stackArray.length-1){
Object[] p=new Object[top*2];
for(int i=0;i<=top;i++) p[i]=stackArray[i];
stackArray=p;
}
top++;
stackArray[top]=j;
}
public static Object pop(){
if(top==-1) return 0;
else{
top--;
return stackArray[top-1];
}
}
public static String panduan(String s){
for(int i=0;i<s.length();i++){
String c=s.substring(i,i+1);
if(c.equals("(")||c.equals("[")||c.equals("{"))
push(c);
else if(c.equals(")")||c.equals("]")||c.equals("}")){
if(c.equals(top)){
pop();
}
}
}
if(top==-1){
answer="ture";
return answer;
}else{
answer="false";
return answer;
}
}
public static void main(String args[]){
Scanner sc=new Scanner(System.in);
s=sc.next();
panduan(s);
System.out.println(answer);
}
} 展开
public class ArrayStack {
private static Object[] stackArray;
private static int top;
private int bottom;
final int minSize=10;
private static String answer=null;
private static String s;
public ArrayStack(){
top=-1;
stackArray=new Object[minSize];
}
public static void push(String j){
if(top==stackArray.length-1){
Object[] p=new Object[top*2];
for(int i=0;i<=top;i++) p[i]=stackArray[i];
stackArray=p;
}
top++;
stackArray[top]=j;
}
public static Object pop(){
if(top==-1) return 0;
else{
top--;
return stackArray[top-1];
}
}
public static String panduan(String s){
for(int i=0;i<s.length();i++){
String c=s.substring(i,i+1);
if(c.equals("(")||c.equals("[")||c.equals("{"))
push(c);
else if(c.equals(")")||c.equals("]")||c.equals("}")){
if(c.equals(top)){
pop();
}
}
}
if(top==-1){
answer="ture";
return answer;
}else{
answer="false";
return answer;
}
}
public static void main(String args[]){
Scanner sc=new Scanner(System.in);
s=sc.next();
panduan(s);
System.out.println(answer);
}
} 展开
2个回答
展开全部
public static void push(String j)这个方法是静态的,可以在main方法中直接调用到,也就是说你并没有显示的调用ArrayStack这个类的new方法,当然ArrayStack的构造方法也就没有被调用到,所以 top=-1;stackArray=new Object[minSize];这两句是不执行的,故stackArray这个数组也就没有被初始化,它是一个null,所以 if(top==stackArray.length-1){你这个地方才会爆空指针,因为stackArray是空值。你把方法的静态去掉,然后在main里这样调用
Scanner sc=new Scanner(System.in);
s=sc.next();
ArrayStack as = new ArrayStack();
as.panduan(s);
System.out.println(answer);
或者
还是使用静态,初始化时
final static int minSize=10;
private static Object[] stackArray = new Object[minSize];
望采纳!!
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询