gpt4 book ai didi

java - 以数组形式返回 int 的质因数作为输入

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

我需要编写一个算法,该算法接受一个int,获取其质因数,将它们放入数组中并返回它们。

我的代码如下。

public static int[] primfaktorzerlegung(int zahl) {
int d=1; //this is the length of the array

int[] result = new int[d]; //array has to be returned

List<Integer> factors = new ArrayList<Integer>();

for(int factor = 2; factor <= zahl; factor++) {
while(zahl % factor == 0) {
factors.add(factor);
zahl = zahl / factor;
}
}

for(int i : factors){ //trying to get every number of the arraylist
int z = i;
result[d] = z; //trying to put the numbers of the arraylist into the array result
d++; //makes the array dimension one higher
}
return result; //returns the array

}

我收到以下错误:

Error: java.lang.ArrayIndexOutOfBoundsException:
Index 1 out of bounds for length 1
at: result[d] = z;

可能是什么原因?

最佳答案

实际上,您并没有通过增加 d 来增加数组的大小。一旦分配了数组,它的大小就固定了。

您可以这样做:

public static int[] primes(int number) {
List<Integer> factors = new ArrayList<>();
for(int factor = 2; factor <= number; factor++) {
while (number % factor == 0) {
factors.add(factor);
number = number / factor;
}
}
return factors.stream().mapToInt(n -> n.intValue()).toArray();
}

stream() 方法将 ArrayList 公开为 Stream,它允许您使用良好的方法来操作集合。其中之一是mapToInt,它允许您将函数应用于流中的每个元素。您应用的函数接受 n 并返回正文中的任何内容(-> 之后的部分)。特别是,由于您要将装箱的 Integer 集合放在一起,因此必须将它们拆箱为 int (有关装箱的更多信息 here ) 。 intValue() 方法正是这样做的。最后,通过调用 toArray() 返回一个 int[]。实际上,您是在说:将 intValue() 应用于列表中的每个项目并返回结果数组。

请注意,我按原样采用了您的主要逻辑,我没有讨论您计算素因数的方式的正确性。

关于java - 以数组形式返回 int 的质因数作为输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60682937/

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