Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java “线程”;“主要”;NullPointerException,在单个数组中实现三个堆栈_Java_Algorithm_Stack - Fatal编程技术网

Java “线程”;“主要”;NullPointerException,在单个数组中实现三个堆栈

Java “线程”;“主要”;NullPointerException,在单个数组中实现三个堆栈,java,algorithm,stack,Java,Algorithm,Stack,这段代码的目的是在一个数组中实现三个堆栈。我使用链接节点来实现堆栈。直接将元素逐个推入数组,每个堆栈中的元素由上一个指针连接。指针是与存储项的数组中的索引相对应的int值nextAvaIndexmethod返回下一个可存储新推送项的可用索引。因为在执行pop方法后,在数组的开头会释放空间。如果indexused

这段代码的目的是在一个数组中实现三个堆栈。我使用链接节点来实现堆栈。直接将元素逐个推入数组,每个堆栈中的元素由上一个指针连接。指针是与存储项的数组中的索引相对应的int值
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;
    }