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)