黑马程序员技术交流社区

标题: 当红色当中的i=5时,break之后j的值是多少?为什么? [打印本页]

作者: 465096445@qq.co    时间: 2015-5-25 23:57
标题: 当红色当中的i=5时,break之后j的值是多少?为什么?
class SuShu
{
    public static void main(String[] args)
    {
         int i, j;
          for (i = 1; i <= 100; i++)
          {
                   for (j = 2; j < i; j++)
                   {
                    if (i % j == 0)
                    break;
                   }


             if (j >= i)
               {
                System.out.println(i);
               }
          }
               
    }

}



作者: 白昼那知夜的黑    时间: 2015-5-26 00:57
本帖最后由 白昼那知夜的黑 于 2015-5-26 00:59 编辑

首先看看if语句成立时
  1. public static void main(String[] args) {
  2.                 int i;
  3.                 int j;
  4.                 for (i = 1; i <= 10; i++) {
  5.                         for (j = 2; j < i; j++) {
  6.                                 if (i % j == 0) {
  7.                                         System.out.println("If语句成立时:i=" + i + " j=" + j);
  8.                                         break;
  9.                                 }
  10.                         }

  11.                         if (j >= i) {
  12.                                 // System.out.println(i);
  13.                         }
  14.                 }
  15.         }
复制代码

输出结果为:
  1. If语句成立时:i=4 j=2
  2. If语句成立时:i=6 j=2
  3. If语句成立时:i=8 j=2
  4. If语句成立时:i=9 j=3
  5. If语句成立时:i=10 j=2
复制代码

所以i=5时,不会进if,那么看下面,看i=5时j等于多少
  1. public static void main(String[] args) {
  2.                 int i;
  3.                 int j;
  4.                 for (i = 1; i <= 10; i++) {
  5.                         for (j = 2; j < i; j++) {
  6.                                 if (i % j == 0) {
  7.                                         break;
  8.                                 }
  9.                                 if(i==5){
  10.                                         System.out.println("i==5时j="+ j);
  11.                                 }
  12.                         }

  13.                         if (j >= i) {
  14.                                 // System.out.println(i);
  15.                         }
  16.                 }
  17.         }
复制代码


输出结果为:
  1. i==5时j=2
  2. i==5时j=3
  3. i==5时j=4
复制代码


可见,i=5时,j最后为4
分析:当i=5开始第二个for循环时,
此时:2<5条件成立,打印一次:i==5时j=2
然后:j++,j=3,此时:3<5条件仍然成立,打印第二次,i==5时j=3
继续:j++,j=4,此时,4<5条件仍然成立,打印第三次,i==5时j=4
最后,j++,j=5,此时,5<5不成立,i=5循环结束
所有最后:i==5时j=4

深夜纯手工、只为进黑马、谢谢楼主,感谢版主!
作者: hui1107464497    时间: 2015-5-26 00:59
白昼那知夜的黑 发表于 2015-5-26 00:57
首先看看if语句成立时

输出结果为:

哇,太详细了吧!




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