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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 qaws5052 于 2016-4-27 01:19 编辑

private static void demo01() {
                //循环100以内的数
                for (int n = 1; n <= 100; n++) {
                //给b初始值true       
                boolean b = true;
                //如果循环拿到的数n不等于1,就进入下面的循环
                if (n != 1) {
                        //i从大于1的第一个数也就是2开始,依次循环到比这个数n本身小的最大的数
                        //何为质数,除了1和他本身不能再被其他数整除.所以...这样循环
                        for (int i = 2; i < n; i++) {
                                if (n % i == 0) { //如果取余为0,也就是说,除了1和其本身有其他数可以整数它,所以置为false
                                        b = false;
                                        //跳出当前循环,判断是否打印,并且到外面循环继续
                                        break;
                                }
                        }
                }
                if (b) {
                        System.out.println(n + "是质数");
                }
                /*
                 * 这段代码有疑问:
                        for (int i = 2; i < n; i++){
               if (n % i == 0){
                               b = false;
                              break;
              }
                        既然当n % i == 0 的时候就是false,即退出了for loop,
                        那么一开始i = 2的时候n % i == 0 也是成立的,
                        那么b也就为false了,但为啥最后输出结果里面还有2呢?
                 * */

                }
        }

17 个回复

倒序浏览
一开始符合i<n的条件么,你的i 取2的时由于你的条件限制,n取不到2
回复 使用道具 举报
后面的过程依然继续执行
回复 使用道具 举报
dtmacg 发表于 2016-4-27 10:34
后面的过程依然继续执行

额.能说清楚点不咯
回复 使用道具 举报
for (int i = 2; i < n; i++)
n也是2  2不小于2啊
回复 使用道具 举报
表示2<2为false 会不走循环直接走下面的代码。
回复 使用道具 举报
top        
回复 使用道具 举报
前排 看看。跳出循环后  if(b)不包括在跳出的循环,所以后面还会执行呀
回复 使用道具 举报
dtmacg 中级黑马 2016-4-28 20:45:35
9#
qaws5052 发表于 2016-4-27 11:48
额.能说清楚点不咯

判断2<2? 你仔细看下 下次再遇到这种问题 自己用eclipse的deBUG运行下就明白了
回复 使用道具 举报

deBUG 不熟

点评

用用就好了,方便你对过程中变量变化的理解  发表于 2016-4-30 07:27
回复 使用道具 举报
回复 使用道具 举报
回复 使用道具 举报
加油加油加油加油加油加油
回复 使用道具 举报
都是大神
回复 使用道具 举报

so.解决了吧。。
回复 使用道具 举报
class ZhiShu
{
        public static void main(String[] args)
        {
                for(int i = 2;i < 1000;i++)
                {
                        boolean a = true;
                        for(int j = 2;j < i;j++)
                        {
                                if(i % j == 0)
                                {
                                        a = false;
                                        break;
                                }
                        }
                        if(a)
                                System.out.print(i+" ," );
                }
        }
}
回复 使用道具 举报
n是取不到2的
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马