我的代码在下面,我试图递归调用我的二进制搜索函数,但始终收到此Exception。我正在尝试找出问题的根源。请记住,为简单起见,我已经排除了创建数组列表的代码,因为我知道它们可以正常工作。
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);
}
}
}
最佳答案
递归调用永远不会终止(仅当使用了所有内存时),因为middle
始终位于列表的中间,但应位于左右之间的中间:
middle = (left + right) / 2;
我还要检查间隔(左右)是否足够大以至于可以划分,或者该算法是否可以停止...并且System.exit有点残酷,您真的要停止虚拟机而没有任何消息吗?
关于java - 识别线程“main”中的异常java.lang.StackOverflowError,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/44347838/