在此代码中,当用户输入字符串时,它被推入堆栈,如果出现“ - ”则弹出前一个字符串,当堆栈变空时,循环执行停止。
每当我尝试推送堆栈空指针异常就在那里。
import java.util.Scanner;
import java.util.*;
public class StackArray {
public static void main(String args[]) {
Scanner scan = new Scanner(System.in);
StackArrayModel stack = new StackArrayModel();
while (true) {
String data = scan.next();
if (data.equals("-")) {
if (stack.isEmpty() == false)
System.out.println(stack.pop());
else
break;
} else {
stack.push(data);
}
}
}
}
// creating resizable array stack
class StackArrayModel {
String[] s;
int n = 0;
public void StackArrayModel() {
s = new String[1];
}
public boolean isEmpty() {
return n == 0;
}
public void push(String item) {
if (n == s.length) {
resize(s.length * 2);
}
s[n++] = item;
}
private void resize(int capacity) {
String[] copy = new String[capacity];
for (int i = 0; i < s.length; i++) {
copy[i] = s[i];
}
s = copy;
}
public String pop() {
if (n > 0 && n == s.length / 4)
resize(s.length / 2);
String item = s[--n];
s[n] = null;
return item;
}
}
答案 0 :(得分:3)
错误发生在StackArrayModel
级。您没有覆盖默认构造函数,因为您在那里添加了void
。
public void StackArrayModel(){
s = new String[1] ;
}
应更改为以下内容,以便覆盖默认构造函数:
public StackArrayModel(){
s = new String[1] ;
}
一旦你这样做了,你就覆盖了默认的构造函数,你的代码应该可以正常工作。