有人可以帮我弄清楚这里出了什么问题吗?这个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);
}
}
}
最佳答案
仅当i
为num%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);
}
}
}
}