在线程“main”中识别异常java.lang.StackOverflowError

时间:2017-06-03 19:33:20

标签: java eclipse exception stack-overflow

我的代码如下,我试图以递归方式调用我的二进制搜索函数,但继续得到此异常。我正在努力找出问题的根源。请记住,为了简单起见,我已经排除了创建数组列表的代码,因为我知道它们是有用的。

  import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.ArrayList;
import java.util.Arrays;
import java.math.*;
public class nickclass {

public static void main(String[] args) {

for(int i = 0; i <(int)listTest.size();i++)
   {
  binarySearchHelp(listTest2,(String)listTest.get(i),0,listTest2.size());
 }

void binarySearchHelp(ArrayList list, String value, int left, int right) {

    if (left > right)
        System.exit(0);

    int middle = (int) Math.floor(list.size()/2);

    if (((String) list.get(middle)).compareTo(value) == 0)
        System.out.println(list.get(middle));


    else if (((String) list.get(middle)).compareTo(value) > 0)
         binarySearchHelp(list, value, left, middle - 1);

    else
         binarySearchHelp(list, value, middle + 1, right);           

  }
}
}

1 个答案:

答案 0 :(得分:1)

递归调用永远不会终止(仅在使用所有内存时),因为middle始终位于列表的中间位置,但它应该是左右之间的 middle :< / p>

middle = (left + right) / 2;

我还会检查间隔(左 - 右)是否足以分割,或者算法是否可以停止...而且System.exit有点残酷,你真的想要在没有任何消息的情况下停止虚拟机?