Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/svg/2.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/codeigniter/3.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中检查堆栈(ArrayList)的大小?_Java_Arraylist_Nullpointerexception_Bluej - Fatal编程技术网

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

在Java中检查堆栈(ArrayList)的大小?,java,arraylist,nullpointerexception,bluej,Java,Arraylist,Nullpointerexception,Bluej,我试图用数组列表实现一个堆栈。 BlueJ告诉我,在编译时,“size”在java.util.ArrayList中具有私有访问权限,即使数组列表是公共的 int stackLength = stackStorage.size; System.out.println(+stackLength); 如果我把线路改成 int stackLength = stackStorage.size(); 程序编译后,当我运行函数时,我得到一个nullPointerExcetion 我不明白为什么会发生这种情

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

int stackLength = stackStorage.size;
System.out.println(+stackLength);
如果我把线路改成

int stackLength = stackStorage.size();
程序编译后,当我运行函数时,我得到一个nullPointerExcetion

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


感谢您的帮助,干杯。

您不能直接调用变量(因为它是一个私有字段)。您应该改用
stackStorage.size()
。还要确保stackStorage已实际实例化


你很可能有:

ArrayList<Object> stackStorage;
然后,如果调用
stackStorage.size()
它应该返回1,这意味着
ArrayList
中有一个元素。如果希望添加更多,只需使用
add()
方法即可。另外,请确保添加的对象与实例化对象的对象相同。例如,您不能在
ArrayList
中存储
String

完整代码示例:

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
ArrayList stackStorage=new ArrayList();
堆栈存储。添加(10)//现在在`索引[0]中有值'10'`
System.out.println(“索引[0]:”+stackStorage.get(0))//印刷品10
System.out.println(“stackStorage.size()=”+stackStorage.size())//打印1


在您的情况下,如果希望存储整数,请将
对象
替换为
整数
NullPointerException
表示当您尝试调用
size()
时,对象仍然是
null
。这应该能解决你的问题。如果您不确定什么是
null
,或者不太了解什么是NPE(NullPointException),我建议您阅读相关内容,如果您还有其他困难,请将其发布到此处。

这是因为
size
是一个
私有字段,因此您无权访问它,其中
size()
是一种可以使用的
公共方法。因此,调用
size()
以获取
ArrayList
的大小。
NullPointerException
与大小无关。这很简单,因为对象未初始化,请确保在使用对象之前初始化对象

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

大小是一个私有变量
size()是一个公共方法
要获取arrayList的大小,需要使用size(),在调用size()之前,不要忘记初始化数组列表,如下所示


列表=新的ArrayList()

您的stackStorage为空。您好,正在更新问题是否已解决。它已被实例化,对象现在更改为“整数”,但它输出的值在我添加到stack@ScottSummers-如果这符合您的问题,请勾选它作为正确答案。另外,欢迎使用StackOverflow,这不是初始化数组的方式。对不起,我的意思是说
ArrayList
@Juxhin,您可以这样初始化它。。你不应该这么做,因为他使用的是原始类型,而且很糟糕,但你可以。@Tom你说得对,谢谢你指出这一点
stackStorage.add(number);
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
List<Something> list = new ArrayList<Something>();