gpt4 book ai didi

java - 识别线程中的异常 "main"java.lang.StackOverflowError

转载 作者:行者123 更新时间:2023-12-02 12:58:54 25 4
gpt4 key购买 nike

我的代码如下,我试图递归调用我的二分搜索函数,但不断收到此异常。我正在尝试找出问题的根源。请记住,为了简单起见,我排除了用于创建数组列表的代码,因为我知道它们是有用的。

  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 始终是列表的中间,但它应该是 left 和 left 之间的middle右:

middle = (left + right) / 2;

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

关于java - 识别线程中的异常 "main"java.lang.StackOverflowError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44347838/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com