递归方法调用的StackOverflowError

时间:2014-05-19 19:24:37

标签: java arrays recursion stack-overflow

我遇到了以下问题:我想制作一个程序,将数据列表(它将是lat / longditude,ICAO等机场信息)转换为数据库,我不仅可以从中对它们进行排序,然后有一个方法为另一个需要以不同方式需要数据的程序打印出某个脚本。

我设法创建了一个列表,用于拆分不同机场的原始数据(来自.txt),以便每个元素包含一个(例如(12921, 'CYAC', 'Cat Lake Airport', 'CA', 51.7272, -91.8244, 0, 0, ''))。当我尝试使用方法时,例如通过调用递归方法来计算列表,该方法返回列表中下一个元素的值加上它自己的值,我在{{1}的行中得到StackOverflowError }。这是方法本身:

if(next!=null)

机场的数量在42000s的某个地方,但它(显然)创造了42000个物品就好了,只是不想通过它们。

有关如何避免该错误的任何想法?阵列会更智能吗?感谢您的帮助,最好的问候!

2 个答案:

答案 0 :(得分:0)

你得到一个stackOverflow,因为java堆栈不是那么大。 你应该使用迭代算法,类似于这个:

public int getLength(){
    MyObject cursor = this;
    int length = 0;
    while (cursor != null) {
       length += 1;
       cursor = this.next;
    }
}

MyObject是当前的类。

答案 1 :(得分:0)

您有两种可能的选择。

  1. 使用简单循环或甚至非迭代公式替换递归:行中第i个项的getLength()n - i + 1,其中n是列表长度,假设第一项有索引1;

  2. [不推荐]通过添加-Xss100m(或您认为合适的任何其他大小)标志来增加JVM堆栈大小,该命令将启动JVM;