rule2k1981
幼苗
共回答了16个问题采纳率:81.3% 举报
》》int k=(int)(Math.sqrt((double)i)+1);//为什么里面要加1
这一行之后的 for 循环的目的是检查 i 是否能被任何等于或大于 2 但小于或等于 (int) Math.sqrt(i) 的整数整除(注:多余的 “(double)” 被去掉了).该 for 循环的条件表达式被编成 j < k,即循环持续到 j == k - 1 为止,不包括 j == k,所以如果没有那个“加 1”,程序肯定会错误地忽略对于 i 是否能被 (int) Math.sqrt(i) 整除的检查.
如果该 for 循环的条件表达式被改成 j (int)(Math.sqrt(i))) {//为什么此处要做这样的判断,为什么这里面不要加1了
这一句的目的是判断内部 for 循环的结束是否因为 j < k 不再为真(若是,则 i 没有被任何等于或大于 2 但小于或等于 (int) Math.sqrt(i) 的整数整除,即 i 是素数).这一句执行的时候,j 的值不是小于就是等于 k,不可能大于 k,也就不可能大于 (int) (Math.sqrt(i) + 1),所以如果这一句 if 判断的条件里也有“加 1”,则句中的条件总为假,程序就不对了.
》》还有没有更简便的写法?
Java 支持带标签的 break 和 continue.在这程序里利用带标签的 continue 就不再需要内部 for 之后的 if 判断了:
class C {
public static void main(String[] args) {
int primeCount = 0;
next_i:
for (int i = 101; i < 200; i++) {
for (int divisor = 2; diviso
1年前
10