黑马程序员技术交流社区

标题: 关于for运算求素数以及boolean的几个疑问 [打印本页]

作者: 光sail    时间: 2012-4-21 21:44
标题: 关于for运算求素数以及boolean的几个疑问
public class PrimeFor
{
        public static void main(String args [])
        {
                for(int i = 100;i >= 100 && i <= 200;i ++ )
                {
                        boolean b = false;
                        for(int j = 2;j < i - 1;j ++)
                        {
                                int k =i % j;
                                if(k == 0)
                                {
                                        b = true;
                                }
                        }         
                        if(!b)
                        {
                                        System.out.println(i);
                        }
                        
                }
        }
}
1、上面的第一个b值为false了,怎么到了后面又成true了,到最后面的!b是true还是false
2、把第一个b为true,第二个b为false,这样为什么就出不来求素数的结果呢

作者: 郑光    时间: 2012-4-21 22:33
1 !b是true,前面内层循环是只要有一个K==0,即i可以除尽任意一个j,b就=true,后面的if内容就不执行了。反之,i%j全都不为0,即这个数是素数,b的值不变为fasle,进入后面的if打印出i的值。
2 如果改了第一个b为true,第二个改为false,说明只有b是true时i才为素数,这样后面的if内把!b改为b即可
作者: chenwei    时间: 2012-4-21 22:35
看k了 ,如果k等于0 b就是true 下面!b就是false就不打印
如果k不是0,b就是false,!b就是true就打印
当i模于j到i-1都不为0时,b不会变成true,!b就会使true,就打印出素数
改了就成了打印所有非素数了,只要是素数就不打印
作者: HeiMaYSL    时间: 2012-4-22 11:39

运行结果:




分析:

作者: 马东华    时间: 2012-4-22 14:23
if语句中的!b表示,是否打印出来,程序中用b=false标记这个说为素数,用b=true标记合数,所以if(!b)就限制了打印条件,只打印素数。

而如果把最开始的b赋值为true,后面的b赋值为false的话,要想打印出素数就需要把if(!b)改为if(b)就行了




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2