在Java中检查堆栈(ArrayList)的大小?

时间:2014-12-16 12:54:25

标签: java arraylist nullpointerexception bluej

我正在尝试使用Array List实现堆栈。 BlueJ告诉我,“size”在java.util.ArrayList中有私有访问权限,即使我在编译时数组列表是公共的。

int stackLength = stackStorage.size;
System.out.println(+stackLength);

如果我将线路更改为..

int stackLength = stackStorage.size();

程序编译,当我运行该函数时,我得到一个nullPointerExcetion。

我不明白为什么会发生这种情况,因为无法手动分配值,因为该值需要来自堆栈大小。

任何帮助表示欢迎,欢呼。

3 个答案:

答案 0 :(得分:2)

您无法直接调用变量(因为它是私有字段)。您应该使用stackStorage.size()代替。还要确保实际实例化stackStorage。


你很可能有:

ArrayList<Object> stackStorage;

但是你必须在某处实例化它:

stackStorage = new ArrayList<Object>();

这也可以在同一行上完成:

ArrayList<Object> stackStorage = new ArrayList<Object>();

创建此ArrayList后,请注意它仍然没有任何元素。为了实际向数组添加Integer,只需执行:

stackStorage.add(number);

在你这样做之后,如果你打电话给stackStorage.size(),它应该返回1,这意味着ArrayList中有一个元素。如果您想添加更多内容,只需使用add()方法即可。还要确保在实例化时添加相同的对象。例如,您无法将String存储在ArrayList<Integer>中。

完整代码示例:

ArrayList<Integer> stackStorage = new ArrayList<Integer>();
stackStorage.add(10); //Now has value `10` in `index[0]`
System.out.println("index[0]: " + stackStorage.get(0)); //Prints 10
System.out.println("stackStorage.size() = " + stackStorage.size()) //Prints 1

如果您希望存储整数,请将Object替换为IntegerNullPointerException表示当您尝试拨打null时,您的对象仍为size()。这应该可以解决您的问题。如果您不确定null是什么或者不太明白什么是NPE(NullPointException)我建议阅读它,如果您有其他困难,请在此处发布。

答案 1 :(得分:1)

那是因为sizeprivate field,因此您无权访问它,size()public method,您可以使用。因此,请致电size()以获取ArrayList的大小。 NullPointerException与大小无关,因为您的对象未初始化,所以请确保在使用之前初始化对象。

List<Something> list = new ArrayList<Something>();

答案 2 :(得分:0)

尺寸是私人变量
size()是一种公共方法
为了获得arrayList的大小,你需要使用size()并在调用size()之前不要忘记初始化数组List,如下所示。

List list = new ArrayList();