空堆栈是否自动具有空值?

Do empty stacks automatically have a null value?

我对 java 很陌生。所以我有一些代码应该将文件添加到堆栈并将堆栈内容与现有引用进行比较。这是应该创建堆栈的 class:

public class ArrayStack<T> implements ArrayStackADT<T> {

    private T[] stack;
    private int top;
    
    // constructor, passes default capacity
    public ArrayStack() {
        top = -1;
        stack = (T[]) new Object[14];
    }
    
    // constructor, initializes capacity to stack and top
    public ArrayStack(int initialCapacity) {
        top = -1;
        stack = (T[])new Object[initialCapacity];
    }
}

这里是调用堆栈的代码:

public static void main(String[] args){
    StartSearch path = new StartSearch(args[0]);
    int distance = Integer.parseInt(args[1]);
    ArrayStack stack = new ArrayStack();    // creates empty stack
    MapCell cell = path.targetMap.getStart();    // gets starting cell
    stack.push(cell);   // pushes starting cell to stack
} 

不确定我是否显示了足够的代码,如果没有,请告诉我。我有一些 push 和 pop 方法来插入和删除堆栈项,并且对于每个 push/pop 他们会打印“push”+ 值:

if (dataItem instanceof MapCell) {
    sequence += "push" + ((MapCell)dataItem).getIdentifier();
}
else {
    sequence += "push" + dataItem.toString();
}

虽然出于某种原因,当我稍后去打印序列时,它输出这个:

nullpush0push2push3

而不是我需要它输出的内容:

push0push2push3

空堆栈是否自动具有空值或其他东西?如何去除开头的空值?

它与你的堆栈没有任何关系class。这就是您初始化 String 变量的方式。或者也许忘了初始化它?演示:

    String sequence = null;
    sequence += "push1";
    System.out.println(sequence);

输出为:

nullpush1

而是将 sequence 初始化为空字符串:

    String sequence = "";

push1

或使用 StringBufferStringBuilder:

    StringBuilder sequence = new StringBuilder();
    sequence.append("push1");
    System.out.println(sequence);

输出相同:

push1