Java 添加元素时ArrayList抛出索引
添加像ar1.add(0)这样的原始元素是可以的,但在尝试添加ar1时不会抛出错误。add(s)抛出错误Java 添加元素时ArrayList抛出索引,java,arraylist,Java,Arraylist,添加像ar1.add(0)这样的原始元素是可以的,但在尝试添加ar1时不会抛出错误。add(s)抛出错误 **错误不在ar数组中错误在ar1数组中,该数组在方法**中具有实例 这有什么解决办法吗? ` 包图; 导入java.util.*; 公共类PrintAllPathUsingDfs{ 静态数组列表arr[]; 公共静态void main(字符串[]args){ 扫描仪s=新的扫描仪(System.in); //int V=s.nextInt(); //int E=s.nextInt(); a
**错误不在ar数组中错误在ar1数组中,该数组在方法**中具有实例 这有什么解决办法吗?
`
包图;
导入java.util.*;
公共类PrintAllPathUsingDfs{
静态数组列表arr[];
公共静态void main(字符串[]args){
扫描仪s=新的扫描仪(System.in);
//int V=s.nextInt();
//int E=s.nextInt();
arr=newarraylist[4];
//数组在java中不能是泛型的
对于(int i=0;i<4;i++)
{
arr[i]=新的ArrayList();
}
arr[0]。添加(1);
arr[0]。添加(2);
arr[0]。添加(3);
arr[2]。添加(0);
arr[2].增加(1);
arr[1].增加(3);
int src=2;
int d=3;
ArrayList ar=新的ArrayList();
打印所有路径(src、d、ar);
}
静态无效打印路径(ArrayList ar)
{
对于(inti=0;i您能发布完整的stacktrace吗?您如何调用上述方法
我的第一个猜测是,您的代码在执行get
时抛出,而不是在调用add
时抛出。错误可能发生在ar.get(ar.size()-1)
在尝试获取元素之前,请检查ar
size
如果大小为0
,则会出现outOfIndex
if(!ar.isEmpty() && d == ar.get(ar.size()-1)) {
printpath(ar);
}
isEmpty
检查ArrayList
是否为空表示size
是否为0
为避免越界
异常,添加了!(非)空
检查您在异常行号处注释的概率是错误的。异常的大多数可能性是在if条件内的下一行-
因为这里您试图从一个数组列表中获取值,该数组列表传递一个大小为-1(即ar.size()-1)的索引。在第一次数组为空时,ar.size()返回0,此时ar.get(-1)将抛出一个异常e.iIndexOutOfBoundsException
注意:目标索引必须在0到列表大小的范围内(0由于代表性低而无法发表评论,但要添加,我相信当调用add()
函数作为ArrayList自动保持其容量时,ArrayList不会抛出越界异常
(这是ArrayList流行的原因之一)
您也可以随时调用ensureCapacity(int minCapacity)
,以确保ArrayList具有足够的空间,minCapacity是您所需的空插槽数。但这也不是必需的
如果在这里发布不是一个好的做法,我将删除它。来自doc:IndexOutOfBoundsException-如果索引超出范围(index<0 | | index>size())
@KunLun这段javadoc是用于get方法的,而不是用于add。我怀疑上面的代码是否在带有注释的那一行引发了异常。最有可能的是在那之后的那一行,确实是在get上。@burm87@KunLun但不是add函数,而是这一个:我认为@burm87是正确的。哦,我的糟糕。很抱歉,这应该是正确的这可能只是一个评论,因为它是在询问信息,猜测并不是真正的答案
if(!ar.isEmpty() && d == ar.get(ar.size()-1)) {
printpath(ar);
}
if(ar.size()>0 && d==ar.get(ar.size()-1)){
// process
}
if(!ar.isEmpty() && d==ar.get(ar.size()-1)){
// process
}