黑马程序员技术交流社区

标题: 打印50到100的所有素数疑问。 [打印本页]

作者: 施俊    时间: 2012-3-15 09:37
标题: 打印50到100的所有素数疑问。
我的代码如下:
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是什么思想?
作者: 张开开    时间: 2012-3-15 09:40
continue不是跳出循环,而是继续循环,你的程序有问题
作者: 施俊    时间: 2012-3-15 10:45
张开开 发表于 2012-3-15 09:40
continue不是跳出循环,而是继续循环,你的程序有问题

忽略后面的注释,那个是写break的时候注释的。
我写的代码可以算出结果,哪里有问题呢?
我主要问的是下面的答案该怎么解释?
作者: 张开开    时间: 2012-3-15 11:33
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);
                }
        }
}

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

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

非常感谢,懂了!




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