开发者社区> 问答> 正文

从int返回素数作为输入作为数组

我需要编码一个算法,该算法采用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;

可能是什么原因?

问题来源:Stack Overflow

展开
收起
montos 2020-03-26 09:51:36 386 0
1 条回答
写回答
取消 提交回答
  • 您实际上并没有通过增加来增加数组的大小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 s 放在一起,因此必须将它们装箱到ints中(有关装箱的更多信息,请点击此处)。该intValue()方法正是这样做的。最后,您可以int[]通过调用返回toArray()它。实际上,您是在说:应用于intValue()列表中的每个项目并返回结果数组。

    请注意,我按原样使用了您的主要逻辑,但我没有弄清您如何计算主要因子。

    回答来源:Stack Overflow

    2020-03-26 09:53:27
    赞同 展开评论 打赏
问答分类:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载