一个for 循环的小问题

Edwin603 2009-04-05 12:16:14
public class Primes {
public static void main(String [] args) {
int nValues = 50;
boolean isPrime = true;

for (int i=2;i<=nValues;i++){
isPrime = true;
for (int j=2;j<i;j++){
if (i%j == 0){
isPrime = false;
}
}
if (isPrime){
System.out.println(i);
}
}
}
}
本人新手 对嵌套的for循环有点搞不明白 这个程序是查找2-50的所有素数,
这个程序是对的 可是我理解不了,我是这么想的请各位大大们指正
(1) 当i=2时isPrime = true;
当j=2时,和i比较的结果为false;
所以直接跳到System....... i=2.
(2) i++,所以i=3,isPrime = true;
因为上次for 循环没执行 所以j不自加1,因此j还是2,那么j<i成立.但是i%j!=0;
所以直接跳到System.....i=3.
(3) i++,所以i=4,isPrime = true;
因为上次for 循环执行了 所以j加1为3,那么j<i成立,但是i%j!=0;
所以直接跳到System.....i=4
可到第3次循环的时候就不对了 这个程序的输出是 输出 2 3 5,因为4不是素数
可是按我的这种想法 4是 要输出的,请各位大大们指正,谢谢拉`
...全文
105 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
PandaIT 2009-04-05
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 Edwin603 的回复:]
说的不队啊
if (isPrime){
System.out.println(isPrime);
System.out.println(i);
}
这个只有在isPrime是true的时候才执行输出 所以是
true
2
true
3
true
5
还是不能看出 执行过程 请看下我对执行过程的分析哪里出错了
[/Quote]

你知道是true的时候输出就行

为4的时候你返回的是一个false

自然不会打印!
PandaIT 2009-04-05
  • 打赏
  • 举报
回复

//看下这个
public class Prime {
public static boolean isPrime(int num){
for(int i=2;i<num;i++){
if((num%i)==0){
return false;
}
}
return true;
}
public static void main(String[] args){
for(int i=1;i<=50;i++){
if(isPrime(i)){
System.out.print(i+" ");
}
}
}
}
Edwin603 2009-04-05
  • 打赏
  • 举报
回复
说的不队啊
if (isPrime){
System.out.println(isPrime);
System.out.println(i);
}
这个只有在isPrime是true的时候才执行输出 所以是
true
2
true
3
true
5
还是不能看出 执行过程 请看下我对执行过程的分析哪里出错了
Edwin603 2009-04-05
  • 打赏
  • 举报
回复
public class Primes {
public static void main(String [] args) {
int nValues = 50;
boolean isPrime = true;

for (int i=2;i<=nValues;i++){
isPrime = true;
for (int j=2;j<i;j++){
if (i%j == 0){
isPrime = false;
}
}
if (isPrime){
System.out.println(i);
}
}
}
}
PandaIT 2009-04-05
  • 打赏
  • 举报
回复
if (isPrime){
System.out.println(isPrime);
System.out.println(i);


加一句打印你就知道了!


javabanana 2009-04-05
  • 打赏
  • 举报
回复
我也来凑个热闹,FOR语句的执行过程的三个条件;第一个(int j=2)是设定初始值,很好理解;
第二个(既:j <i;)是设定循环的条件,当(J<I=FALSE)时不执行{循环体内容};、
第三个(j++)是最容易混淆的,我刚开始学的时候也迷糊过实际上它是在循环体执行完以后才被执行。
可以把for语句这样写,我想会容易理解点:
for{int i=2;
i<j;
循环体;
i++;
}
说了这么多不知道lz可能同意?!呵呵……
Edwin603 2009-04-05
  • 打赏
  • 举报
回复
谢谢回复,但是还是没有明白,我想知道我的分析过程哪里有问题,
按我的分析过程 4 是输出的,可是实际上 4 并没有打印输出,
谢谢有人能帮我看下我的分析过程指出哪里有错误,我觉得我对这个
程序里有的地方肯定理解错误了,想知道错在哪,请老手们指教,
我会十分感谢的,谢谢各位拉 请帮我下
ty_tarena_pger 2009-04-05
  • 打赏
  • 举报
回复
加夜班的还停多的啊 ,好运】

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧