java为什么递归地用随机数填充LinkedList时会出现StackOverflowException?
我需要以下方法的帮助:
我们的任务是用head编写一个递归方法:
generateRandoms(int start,int end, int n)
该方法应在开始和结束之间生成n随机数
这就是我得到的:
public static List<Integer> generateRandoms(int start,int end, int n) {
if (n == 0) return null;
int random = ((int) (Math.random()*((end+1)-start)+start));
List<Integer> randomList = new LinkedList <Integer>();
randomList.add(random);
return randomList.addAll(generateRandoms(start, end, n--));
}
问题是,这不起作用,因为addAll返回一个布尔值。我已经没有任何想法了,你能给我一个提示吗
你好,丹尼尔加
# 1 楼答案
n
是你的问题。在递减n
之前进行递归调用试一试
这将修复堆栈溢出。我还没有运行你的代码,但我认为你应该使用
还有
# 2 楼答案
三项改进:
不要返回
NULL
。这是为了防止得到NullPointerException
。相反更改声明
有以下两种说法:
这是因为,正如您所说,
addAll()
返回boolean
另外,对于
StackOverflowException
:抛出SOE是因为,正如@bradimus所说,您在更改n
的值之前进行了递归调用(后缀减量运算符在使用当前值后更改变量的值)
因此,n的值永远不会达到0,它会导致无限递归。因此,程序内存不足。用{}或{}更改{}
# 3 楼答案
存在多个问题:
与直接返回addAll调用返回的值不同,您必须将其拆分为两个操作。首先将所有内容添加到随机列表并返回该随机列表
正如其他人已经指出的,您不能使用n,因为这将首先通过n,然后在通过n后减小它。改用n或n-1
您不能让您的方法返回null,因为如果将null传递给addAll方法,它将抛出NullPointerException。而是返回一个空列表