A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 光sail 中级黑马   /  2012-4-21 21:44  /  1862 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

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,这样为什么就出不来求素数的结果呢

评分

参与人数 1技术分 +1 收起 理由
贠(yun)靖 + 1

查看全部评分

4 个回复

倒序浏览
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即可

评分

参与人数 1技术分 +1 收起 理由
贠(yun)靖 + 1

查看全部评分

回复 使用道具 举报
看k了 ,如果k等于0 b就是true 下面!b就是false就不打印
如果k不是0,b就是false,!b就是true就打印
当i模于j到i-1都不为0时,b不会变成true,!b就会使true,就打印出素数
改了就成了打印所有非素数了,只要是素数就不打印

评分

参与人数 1技术分 +1 收起 理由
贠(yun)靖 + 1

查看全部评分

回复 使用道具 举报

运行结果:




分析:

评分

参与人数 1技术分 +1 收起 理由
贠(yun)靖 + 1

查看全部评分

回复 使用道具 举报
if语句中的!b表示,是否打印出来,程序中用b=false标记这个说为素数,用b=true标记合数,所以if(!b)就限制了打印条件,只打印素数。

而如果把最开始的b赋值为true,后面的b赋值为false的话,要想打印出素数就需要把if(!b)改为if(b)就行了
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马