【问题标题】:Do empty stacks automatically have a null value?空堆栈是否自动具有空值?
【发布时间】:2021-05-21 17:18:55
【问题描述】:

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

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
} 

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

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

但由于某种原因,当我稍后进入打印序列时,它会输出以下内容:

nullpush0push2push3

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

push0push2push3

空堆栈是否自动具有空值或其他内容?如何去掉开头的空值?

【问题讨论】:

  • 如果开头确实有一个 null 值,它会 a) 写 pushnull 并且 b) 根本不这样做,而是抛出一个 NullPointerException,因为你调用了一个方法dataItem 为空。

标签: java null stack


【解决方案1】:

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

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

输出是:

nullpush1

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

    String sequence = "";

推1

或使用StringBufferStringBuilder

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

输出相同:

推1

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-07-18
    • 2015-06-22
    • 1970-01-01
    • 1970-01-01
    • 2016-07-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多