Java 递归方法调用上的StackOverflower错误
我遇到了以下问题:我想制作一个程序,将数据列表(它将是机场信息,如lat/longditude、ICAO等)转换成一个数据库,从中我不仅可以对它们进行排序,还可以有一种方法为需要不同方式数据的其他程序打印特定脚本 我设法创建了一个列表,将原始数据(来自.txt)按不同的机场进行分割,以便每个元素都包含一个(例如Java 递归方法调用上的StackOverflower错误,java,arrays,recursion,stack-overflow,Java,Arrays,Recursion,Stack Overflow,我遇到了以下问题:我想制作一个程序,将数据列表(它将是机场信息,如lat/longditude、ICAO等)转换成一个数据库,从中我不仅可以对它们进行排序,还可以有一种方法为需要不同方式数据的其他程序打印特定脚本 我设法创建了一个列表,将原始数据(来自.txt)按不同的机场进行分割,以便每个元素都包含一个(例如(12921,'CYAC','Cat Lake Airport','CA',51.7272,-91.8244,0,0',))。当我尝试使用一些方法,例如通过调用一个递归方法对列表进行计数,
(12921,'CYAC','Cat Lake Airport','CA',51.7272,-91.8244,0,0',)
)。当我尝试使用一些方法,例如通过调用一个递归方法对列表进行计数,该方法返回列表中下一个元素的值加上它自己的值时,我在if(next!=null)
行中得到一个StackOverflowerError
。以下是方法本身:
public int getLength(){
if(next!=null){
return next.getLength()+1;
}
else{
return 1;
}
}
机场的数量大约在42000个左右,但它(表面上)创造了42000个物体,很好,只是不想穿过它们
关于如何避免这个错误有什么想法吗?阵列会更智能吗?谢谢你的帮助,问好 因为java堆栈没有那么大,所以会出现堆栈溢出。 您应该使用迭代算法,类似于此:
public int getLength(){
MyObject cursor = this;
int length = 0;
while (cursor != null) {
length += 1;
cursor = this.next;
}
}
其中MyObject是当前类。您有两个可能的选项
getLength()
行中第i项的n-i+1
,其中n
是列表长度,假设第一项有索引1循环不是更简单吗?用当前的方法,您将非常快地进入Java。为什么你需要一个递归的解决方案?我用了一个递归的解决方案,因为这是我们在学校学到的最好的。。。显然不是那种尺寸:)你可以让它尾部递归并使用一个。哦,这是一个非常好的主意,非常感谢,我会马上试用它!