gpt4 book ai didi

Java递归添加到列表

转载 作者:行者123 更新时间:2023-11-30 01:48:44 26 4
gpt4 key购买 nike

一切看起来都很好,但是这一行有一个错误:

return new ArrayList<Integer>(Arrays.asList(i, FACTORISATION(n/i)));

错误是:构造函数 ArrayList(Arrays.asList(i), ArrayList) 未定义

我知道该错误表明数组的 asList 方法不接受 ArrayList,但是如何在列表中添加 FACTORISATION 返回的项目?这个递归真的让我很困惑

最佳答案

Java 并不是真正的函数式编程语言,因此编写这样的函数式代码往往有点笨拙。

你想要这样的东西:

public static List<Integer> FACTORISATION(int n) {
if (PRIME(n)) {
// return a one-element array
return Collections.singletonList(n);
} else {
// find a prime divisor, p
for (int i = 2; i < Math.sqrt(n); i++) {
List<Integer> newList = new ArrayList<>();
newList.add(i);
newList.addAll(FACTORISATION(n/i));
return newList;
}
return Collections.emptyList();
}
}

注意我更改为返回接口(interface)类型 List<Integer>也可以使用Collections.singletonList .

如果你可以使用Guava,那么尝试ImmutableList,它更优雅一点。

public static List<Integer> FACTORISATION(int n) {
if (PRIME(n)) {
// return a one-element array
return ImmutableList.of(n);
} else {
// find a prime divisor, p
for (int i = 2; i < Math.sqrt(n); i++) {
return new ImmutableList.Builder<Integer>()
.add(i)
.addAll(FACTORISATION(n/i))
.build();
}
return Collections.emptyList();
}
}

关于Java递归添加到列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56844475/

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