【发布时间】:2019-03-19 09:31:01
【问题描述】:
在 Schildt 的 Java 初学者指南第 2 章的自测中,有一个练习可以编写一个程序来查找 2 到 100 之间的所有素数。
作者给出的正确答案如下:
class Prime {
puЬlic static void main(String args[]) {
int i, j;
boolean isprime;
for(i=2; i < 100; i++) {
isprime = true;
for (j=2; j <= i/j; j++)
if((i%j) == 0) isprime = false;
if (isprime)
System.out.println(i +" - is a prime number.");
}
}
}
我不能理解两件事
1) 第二个 FOR 循环的条件:
j <= i/j;
这是某种寻找素数的数学算法吗?
我的条件版本看起来像
j < i;
2) 如果在第二个循环的条件下使用i <= j 而不是i < j,那么程序的输出将为空。为什么?
感谢您的帮助!
第二个问题的解释:
当我解决这个问题时,依靠“我的”版本的素数定义,我的代码如下所示:
for(i=2; i < 100; i++) {
isprime = true;
for (j=2; j <= i; j++)
if((i%j) == 0) isprime = false;
if (isprime)
System.out.println(i +" - is a prime number.");
}
注意第二个循环的情况: 我
如果你依赖“我的”对素数的定义,那么条件中的等号应该是。
尝试运行程序。输出将为空。
但是如果条件去掉了等号for (j=2; j < i; j++),程序就可以正常工作了。
是什么原因?
【问题讨论】:
-
你确定你放的是 j
-
@Mwak 是的,如果我选择
i <= j,我确定应该是j <= i;,那么第二个循环将是无限的。第一次迭代:i = 2; j = 2,循环进入下一次迭代第二次迭代:i = 2; j = 3,条件i <= j为真,循环进入下一次迭代第三次迭代:i = 2; j = 4,条件i <= j为真,循环进入下一次迭代... ... -
知道了,我编辑了我的答案来解释发生了什么。