Return 来自 int 的质因数作为数组的输入
Return prime factors from int as input as an array
我需要编写一个算法,它接受一个 int
,获取它的质因数,将它们放入一个数组中,然后 returns 它们。
我的代码如下。
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
和 returns 的函数,无论正文中出现什么(->
之后的部分)。特别是,由于您要将 盒装 Integer
的集合放在一起,您必须将它们拆箱到 int
中(更多关于装箱 here ). intValue()
方法正是这样做的。最后,您通过调用 toArray()
来 return 一个 int[]
。实际上,您是在说:将 intValue()
应用于列表中的每个项目,并将 return 应用于结果数组。
请注意,我按原样采用了你的主要逻辑,我没有深入探讨你如何计算质因数的正确性。
我需要编写一个算法,它接受一个 int
,获取它的质因数,将它们放入一个数组中,然后 returns 它们。
我的代码如下。
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
和 returns 的函数,无论正文中出现什么(->
之后的部分)。特别是,由于您要将 盒装 Integer
的集合放在一起,您必须将它们拆箱到 int
中(更多关于装箱 here ). intValue()
方法正是这样做的。最后,您通过调用 toArray()
来 return 一个 int[]
。实际上,您是在说:将 intValue()
应用于列表中的每个项目,并将 return 应用于结果数组。
请注意,我按原样采用了你的主要逻辑,我没有深入探讨你如何计算质因数的正确性。