有人可以帮我弄清楚这里出了什么问题吗?这个Java程序要花很长时间才能运行,以至于我还没有看到结果。

/* Returns all the factors of a given number */

import java.util.*;
import java.lang.Object;

class factors{
    public static ArrayList<Integer> factorList;

    public static void get_factors(int num){
        factorList = new ArrayList<Integer>();
        int i = 2;
        while(i < num)
        {
            if (num%i == 0)
            {
                factorList.add(i);
                i++;
            }
        }
    }

    public static void main(String[] args){
        int num = 20;
        get_factors(num);

        for(int i = 0; i < factorList.size(); i++)
        {
            int element = factorList.get(i);
            System.out.println(element);
        }
    }
}

最佳答案

仅当inum%i == 0时才递增,因此对于i=3停止递增,并且while循环永远不会结束。

你要这个 :

        if (num%i == 0)
        {
            factorList.add(i);
        }
        i++;


另请注意,没有理由使用while循环。

这是更合乎逻辑的解决方案:

public static void get_factors(int num) {
    factorList = new ArrayList<Integer>();
    for (int i = 2; i < num; i++) {
        if (num % i == 0) {
            factorList.add(i);
        }
    }
}


另外,您应该考虑,如果factorList初始化应该在get_factors方法中,那么我认为您应该将其移到类中

class factors{
    public static ArrayList<Integer> factorList = new ArrayList<>();

    public static void get_factors(int num) {
    factorList = new ArrayList<Integer>();
        for (int i = 2; i < num; i++) {
            if (num % i == 0) {
                factorList.add(i);
            }
        }
    }
}

08-25 14:42