Java “线程”;“主要”;NullPointerException,在单个数组中实现三个堆栈
这段代码的目的是在一个数组中实现三个堆栈。我使用链接节点来实现堆栈。直接将元素逐个推入数组,每个堆栈中的元素由上一个指针连接。指针是与存储项的数组中的索引相对应的int值Java “线程”;“主要”;NullPointerException,在单个数组中实现三个堆栈,java,algorithm,stack,Java,Algorithm,Stack,这段代码的目的是在一个数组中实现三个堆栈。我使用链接节点来实现堆栈。直接将元素逐个推入数组,每个堆栈中的元素由上一个指针连接。指针是与存储项的数组中的索引相对应的int值nextAvaIndexmethod返回下一个可存储新推送项的可用索引。因为在执行pop方法后,在数组的开头会释放空间。如果indexused
nextAvaIndex
method返回下一个可存储新推送项的可用索引。因为在执行pop
方法后,在数组的开头会释放空间。如果indexused
它将继续向前移动以存储新项,而如果indexused
到达数组末尾,该方法将搜索数组开头是否有可用空间。
但是当我运行它时,它抛出了NullPointerException
,我知道这个错误的含义,但我无法修复它。谢谢你的评论!代码正确吗?从int类型数组中删除项的另一个问题。我让arr[I].data=0
删除该项,并使用语句arr[I].data==0
检查一个空格是否为空。但是如果一个空间存储0
?谢谢你的建议
}
线程“main”java.lang.NullPointerException中出现异常
在stackandqueue.FlexiblemultiStack$stackNode.access$000处(FlexiblemultiStack.java:86)
在stackandqueue.FlexiblemultiStack.nextAvaIndex(FlexiblemultiStack.java:61)
在stackandqueue.FlexiblemultiStack.push中(FlexiblemultiStack.java:32)
位于stackandqueue.stackandqueue.main(stackandqueue.java:71)
/Users/xchen011/Library/Caches/NetBeans/8.1/executor snippets/run.xml:53:Java返回:1
生成失败(总时间:0秒)在pop()
方法中,通过将数组索引设置为null(arr[lastIndex]=null
)来表示打开的索引。在nextAvaIndex()
中,通过检查arr[i].数据来检查索引是否可用。如果pop()
将arr[i]
设置为null
,您将获得NullPointerException
。要使可用性的定义与可用性检查一致,请尝试替换arr[indexused]。data!=0带有arr[indexused]!=null和if(arr[i].data==0)
与if(arr[i]==null)
在nextAvaIndex()方法中
public int nextAvaIndex(){
int指数=-1;
if(indexused==arr.length | | arr[indexused]!=null){
对于(int i=0;i
}让我们看看stacktrace,这样我们就知道NPE是从哪里抛出的,怎么样
public class FlexiblemultiStack {
private int[] toppoint = {-1, -1, -1};// assume number of stack ==3;
private int indexused = 0;
private stackNode[] arr;
public FlexiblemultiStack(int sizeEach, int stackNO) {
arr = new stackNode[sizeEach * stackNO]; //
}
public boolean isEmpty(int stackNum) {
return toppoint[stackNum] == 0;
}
public void push(int item, int stackNum) {
int lastIndex = toppoint[stackNum];
int nextIndex = nextAvaIndex();
if (nextIndex == -1) { // if nextIndex = -1, there is no more space!
System.out.println("There is no more space!");
} else {
toppoint[stackNum] = nextIndex;
arr[toppoint[stackNum]] = new stackNode(item, lastIndex);
indexused++;
}
}
public int pop(int stackNum) {
if (toppoint[stackNum] == -1) {
return 0;
} else {
int value = arr[toppoint[stackNum]].data;
int lastIndex = toppoint[stackNum];
toppoint[stackNum] = arr[toppoint[stackNum]].previous;
arr[lastIndex] = null;
indexused--;
return value;
}
}
public int peek(int stackNum) {
return arr[toppoint[stackNum]].data;
}
public int nextAvaIndex() {
int index = -1;
if (indexused == arr.length || arr[indexused].data != 0) {
for (int i = 0; i < arr.length; i++) {
if (arr[i].data == 0) { // error
index = i;
break;
}
}
return index;
} else {
return indexused;
}
}
public void print(int stackNum) {
while (toppoint[stackNum] != -1) {
System.out.print(arr[toppoint[stackNum]].data + "<--");
toppoint[stackNum] = arr[toppoint[stackNum]].previous;
}
}
public void printarr(){
for(int i = 0; i< arr.length;i++){
System.out.print(arr[i]);
}
}
public class stackNode { // Exception in thread "main" java.lang.NullPointerException
public int nextAvaIndex() {
int index = -1;
if (indexused == arr.length || arr[indexused] != null) {
for (int i = 0; i < arr.length; i++) {
if (arr[i] == null) { // error
index = i;
break;
}
}
return index;
} else {
return indexused;
}