我用Java编写的这个程序需要很长时间才能运行(我还没有看到结果)

use*_*902 0 java loops arraylist while-loop

有人可以帮我弄清楚这里出了什么问题吗?这个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);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

lib*_*bik 13

i只有当它增加时才会递增num%i == 0,因此i=3你停止递增它而while循环永远不会结束.

你要这个 :

        if (num%i == 0)
        {
            factorList.add(i);                
        }
        i++;
Run Code Online (Sandbox Code Playgroud)

另请注意,没有理由使用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);
        }            
    }
}
Run Code Online (Sandbox Code Playgroud)

另外,你应该考虑,如果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);
            }            
        }
    }
}
Run Code Online (Sandbox Code Playgroud)