好的,所以我在学校里一直在研究这个项目大约一个星期,我似乎无法弄清楚为什么,但大多数数字都有效,但出于某些原因,36或108之类的数字不会。我想知道是否有人能发现原因。谢谢!
public class FactorGenerator {
public FactorGenerator(int a) {
number = a;
factor = 2;
}
public int nextFactor() // Finds the next factor
{
number = (number / factor);
return factor;
}
public boolean hasMoreFactors() // Uses loops and decisions to find if there
// are more factors
{
boolean hasMoreFactors = false;
done = false;
if (factor < number) {
while (!done) {
if (number % factor != 0) {
factor++;
}
else {
done = true;
hasMoreFactors = true;
}
}
}
return hasMoreFactors;
}
private int number; // Instance Fields
private int factor;
private boolean done;
}
答案 0 :(得分:1)
你非常接近!您无需修改number
中的nextFactor()
变量,只需增加factor
变量:
public int nextFactor()
{
return factor++;
}
进行更改,运行此:
FactorGenerator gen = new FactorGenerator(36);
while (gen.hasMoreFactors())
System.out.println(gen.nextFactor());
的产率:
2
3
4
6
9
12
18
36
此输出省略了因子1
。如果您在factor
构造函数中将1
初始化为FactorGenerator
,那么您将获得完整的因子列表。