我正在尝试最小化迭代,因此我在第二个j<=i/j
中使用了for loop
。代码正在运行,但我无法获得完整的输出。我的意思是6的因子是2和3,但它只是打印2.
任何人都可以帮助我吗?我是初学者。
class factors{
public static void main (String args[]){
int i,j;
for(i=2;i<=100;i++){
System.out.print("\nFactors of "+i+" : ");
for(j=2; j <= i/j; j++){
if((i%j)==0){
System.out.print(j+" ");
}
}
}
}
}
答案 0 :(得分:3)
后:
System.out.print(j+" ");
添加:
System.out.print((i/j)+" ");
迭代直到i/j
是因为因子成对出现,j
和i/j
,你只需迭代其中的一半,其他人就可以计算出来了从你找到的那些。
答案 1 :(得分:1)
您会收到意外的输出,因为每次迭代循环都会评估i/j
。
当j=2
,i/j
为3时,条件为真,并且循环的第一次迭代运行。下一次迭代j=3
,i/j
为2,小于j
,条件为false,因此循环终止,而不运行第二次迭代。
我认为你的意思是i / 2
。因此,将i/j
更改为i/2
。
答案 2 :(得分:1)
for(j=2; j <= i/j; j++)
让我们运行i = 6的代码
首先,它将j初始化为0然后
J<=6/2
所以它是真的,因为2<=3
但是在下一次迭代中
J=3
然后
J<=6/3
因为3<=2
所以改变条件。
答案 3 :(得分:0)
for(j=2; j <= i/j; j++){
if((i%j)==0){
System.out.print(j+" ");
}
}
此代码中存在两个问题。
首先,您只能在找到对(j
和j
)时打印一个因子(i/j
)。已经提到过here。
其次,通过打印j
和i/j
来解决这个问题会打破完美正方形的结果,其中j
和i/j
相同(相等)。它将平方根打印为因子两次。要解决这个问题,您可以在测试完美正方形之前停止循环。然后你可以测试循环外的特殊情况。
for (j = 2; j < i/j; j++) {
if ((i%j) == 0) {
System.out.print(j + " " + i/j + " ");
}
}
if (j * j == i) {
System.out.print(j);
}
另一种方法是在打印j
之前检查i/j
和i/j
是否相等。像
System.out.print(j + " ");
if (j != i/j) {
System.out.print(i/j + " ");
}
但是这需要更多的检查而不是必要的,因为每次循环只会发生一次相等。但是你必须为你找到的每个因子对检查一次。