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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 施俊 中级黑马   /  2012-3-15 09:37  /  2627 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

我的代码如下:
class LX10
{
        public static void main(String[] args)
        {
                W:for (int i=50;i<=100 ;i++ )//遍历
                {
                        for (int j=2;j<i ;j++ )//模数遍历
                        {
                                if (i%j==0)
                                {
                                        continue W;//结果为0,跳出外循环。
                                }
                               
                        }
                        System.out.println(i);
                }
        }
}
可以算出结果,也明白原理,但是与书中答案不同,书中:
class LX10
{
        public static void main(String[] args)
        {
                int i,j;
                W:for (i=50;i<=100 ;i++ )
                {
                        for (int j=2;j<i ;j++ )
                        {
                                if (i%j==0)
                                {
                                        break;
                                }
                               
                        }
                        if(j<i)         //就是这里不懂,为什么要这样限定?
                        {
                                 continue;
                        }
                        System.out.println(i);
                }
        }
}
这个代码中第二个if之前明白,第二个if为什么要这样设定?j<i是什么思想?

评分

参与人数 1技术分 +1 收起 理由
房宝彬 + 1

查看全部评分

6 个回复

倒序浏览
continue不是跳出循环,而是继续循环,你的程序有问题
回复 使用道具 举报
张开开 发表于 2012-3-15 09:40
continue不是跳出循环,而是继续循环,你的程序有问题

忽略后面的注释,那个是写break的时候注释的。
我写的代码可以算出结果,哪里有问题呢?
我主要问的是下面的答案该怎么解释?
回复 使用道具 举报
class LX10
{
        public static void main(String[] args)
        {
                int i,j;
                W:for (i=50;i<=100 ;i++ )
                {
                        for (int j=2;j<i ;j++ )//在这个循环中跳出的,可能是当j=i了,因为当j=i的时候,求余也是0,这个时候也会break跳出循环,如果没有下面的if(j<i)判断语句,
                                                        //势必会把每个元素都打印出来,而得不到相应的结果,你再好好琢磨下,不明白可以qq646089668.详谈
                        {
                                if (i%j==0)
                                {
                                        break;
                                }
                                
                        }
                        if(j<i)         //就是这里不懂,为什么要这样限定?
                        {
                                 continue;
                        }
                        System.out.println(i);
                }
        }
}

评分

参与人数 1技术分 +1 收起 理由
房宝彬 + 1

查看全部评分

回复 使用道具 举报
当第二个for循环执行完的时候,因为j++,所以j不可能会小于i了,所以会打印出素数来。
比如53这个素数,当第二个for执行到j=52时,因为可以被整出,break之后,j++(j++之后,j=53)因为不满足j<i,所以执行第二个if,53 不会小于53,故会打印出这个数。你可以加上断点,自己调试一下,就明白了。
回复 使用道具 举报
张开开 发表于 2012-3-15 11:33
class LX10
{
        public static void main(String[] args)

非常感谢,我明白了!
回复 使用道具 举报
施俊 中级黑马 2012-3-15 13:28:08
7#
黑马张健 发表于 2012-3-15 11:35
当第二个for循环执行完的时候,因为j++,所以j不可能会小于i了,所以会打印出素数来。
比如53这个素数,当第 ...

非常感谢,懂了!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马