自编一个算100到200内质数的程序,结果发现一个问题。
当程序如下时:
public class TestFor3 {
public static void main(String args[]) {
boolean result = true;
for (int i=101;i<=200;i+=2) {

for(int f=2;f<i;f++) {
if(i % f == 0) {
result = false;
   break;
  }
}
if (!result) {continue;}
System.out.println("100到200内的质数有:" + i);
}
}
}
得出的结果是:
100到200内的质数有:101
100到200内的质数有:103
然后将“boolean result = true;”放到此语句的for循环里面,结果就是正确的,这到底是怎么回事?为什么那个位置计算的值只有101和103?有哪位大神能指点下?

解决方案 »

  1.   

    你就没考虑过如果不是质数result该怎么处理吗?
      

  2.   

    我考虑了啊,如果不是质数就执行"continue"跳过输出继续执行啊,我再去好好了解下成员变量和局部变量的概念。
      

  3.   

    就是你现在的是成员变量,其实也是局部变量,但你就在main方法里写,可以当成是成员变量把。那你的for循环里,和if语句里,是共享着用这个成员变量。如果把boolean声明在for循环里,那这个变量在for循环外面就不能用了,明白了吗?在for循环里,你每循环一次boolean的值都会首先是true
      

  4.   

    你的整个循环里面只有把result变成false的,没有把它变成true的。
    当遇到一个不是质数,它就变成false了
    等你再遇到一个质数,它还是false,怎么可能输出呢?是不是成员变量不是主要原因,主要原因是楼主逻辑没写好。
    楼主要学会自己调试。
      

  5.   

    你的循环里面,如果为不为质数的话,result已经被设置成false了,下一轮的for循环result没有被设置成true,自然是跳出循环。
      

  6.   

    两种解决方法,第一种是你说的那样。另一种是在for循环里在为质数时result设为true.public class TestQuestion {
    public static void main(String args[]) {
    boolean result = true;//注意这里只有在初始化的时候设成了true
    for (int i=101;i<=200;i+=2) {
    for(int f=2;f<i;f++) {
    if(i % f == 0) {
       result = false;
        break;
      }
    else{
    result = true; //注意到了没有,你在for循环里只有把result设为false,而没有把他设为true.
    }
    }
    if (!result) {continue;}
    System.out.println("100到200内的质数有:" + i);
    }
    }
    }
      

  7.   

    当值为105是,它不是质数,就将result赋值为flase了。也就是说if(!reslt)永远为真所以一直contine.
        解决的办法。就是楼上的办法了。。
      

  8.   

    当你的i不是质数时(result=false),你只是continue跳出来,没有将result的值设置成true,导致程序中result永远等于false,所以就一直有输出了
    你讲的是一种改法,将result放到循环里面,相当于每次进入循环设置result成true,
    另外一种更好的改法是:continue;之前将result=true;
      

  9.   

    可你这样写第一次出现质数后result就永远是false了,根本没有处理合数合数的逻辑。跟成员变量哪有什么关系
      

  10.   

    谢谢各位,在你们的帮助下,我茅塞顿开。 是我的逻辑出了问题,因为我把boolean声明在for循环外面,for循环里面里面将result变为false后,false就一直都是false了,所以后面的就是一直循环执行continue到程序终结。