黑马程序员技术交流社区

标题: 关于循环语句的一些问题。。请大神赐教。。谢谢 [打印本页]

作者: yekong262    时间: 2014-1-2 22:50
标题: 关于循环语句的一些问题。。请大神赐教。。谢谢
本帖最后由 yekong262 于 2014-1-3 10:04 编辑
  1. int x=0;
  2.                 while (x<3)
  3.                 {
  4.                         int z=0;    //这个变量z为什么只是自增一次。
  5.                         for (int y=0;y<z ;y++ )
  6.                         {
  7.                                 System.out.println("AAA");
  8.                         }
  9.                         x++;
  10.                         z++;   //为什么没有结果呢,不是应该打印2次AAA么??
  11.                         System.out.println("z="+z);
复制代码

为什么没有结果。。请大师给说下这个是怎么运行的顺序。。。
为什么跟想下面的这个不一样呢
  1. int x=0;
  2.                 while (x<3)
  3.                 {
  4.                         int z=0;
  5.                          z++;
  6.                         for (int y=0;y<z ;y++ )
  7.                         {
  8.                                 System.out.println("b.-++");
  9.                         }
  10.                         x++;
  11.                         
  12.                         System.out.println("z="+z);
复制代码

作者: 道逍云心    时间: 2014-1-2 23:09
因为上面的z=0 不执行for语句才会这样
作者: 胡永城    时间: 2014-1-2 23:14
  1. <b><font size="4">int x=0;
  2.                 while (x<3)
  3.                 {
  4.                         int z=0; //每次循环,都重新初始化了一次z,所以每次都是z=0
  5.                         for (int y=0;y<z ;y++ )//y=0-->y<0 false 循环停止
  6.                         {
  7.                                 System.out.println("AAA");
  8.                         }
  9.                         x++;
  10.                         z++;   //自增之后,下面输出是z=1
  11.                         System.out.println("z="+z);</font></b>
复制代码


  1. <b><font size="4">int x=0;
  2.                 while (x<3)
  3.                 {
  4.                         int z=0;//每次while循环都初始化z=0,
  5.                          z++;//z自增后,z=1
  6.                         for (int y=0;y<z ;y++ )//for只循环一次,y=0-->y<1 true-->输出-->y++(y=1)-->y<1 false 循环停止
  7.                         {
  8.                                 System.out.println("b.-++");
  9.                         }
  10.                         x++;
  11.                         
  12.                         System.out.println("z="+z);</font></b>
复制代码




作者: wowo6288    时间: 2014-1-2 23:15
你上面第一个程序由于每循环一次while 里面的语句int z=0; 就又被置零所以就
for (int y=0;y<z ;y++ )
            {
                    System.out.println("AAA");
            }
这个语句就执行不了
而你的第二个程序在执行for循环之前z就执行了一次自加所以它就可以执行一次,执行一次的原因是因为和上面一样while循环一次又将z变为0所以z就只能加1

作者: Faner    时间: 2014-1-2 23:16
本帖最后由 Faner 于 2014-1-2 23:17 编辑

int x=0;
                while (x<3)       //进入循环
                {
                        int z=0;    //这个变量z为什么只是自增一次。   我不清楚你所讲的自增 是怎么理解 此句仅仅是赋值
                        for (int y=0;y<z ;y++ ) // 这句不执行 因为 z=0  条件不满足   故不打印循环体的内容
                        {
                                System.out.println("AAA");
                        }
                        x++; 这个是X 自增   1
                        z++;   //为什么没有结果呢,不是应该打印2次AAA么??   这个是z 自增  
                        System.out.println("z="+z);  会输出 z 自增后的数值  1
        然后满足循环条件 继续循环 但是你在开头 有把 重新定义了一次Z =0   所以还是不执行For 语句




你第二个程序 因为
                        int z=0;
                         z++;  //z=1
你for语句 判断满足 所以会执行
作者: 松子    时间: 2014-1-2 23:25
                int x=0;
                while (x<3)
                {
                        int z=0;    //while每循环一次,就重新定义了变量z,前一次循环中的自增和这个新初始化的变量z没关系
                        for (int y=0;y<z ;y++ )
                        {
                                System.out.println("AAA"); //每次z的值都是0,不满足y<z,所以每次都不走for循环,这里的语句执行不到
                        }
                        x++; //从0依次自增到1,2。while循环三次
                        z++;  //每次都从0自增,自增后值为1
                        System.out.println("z="+z); //输出z=1,while 循环三次,这里输出三次
               }
最后的结果是:
z=1
z=1
z=1

                int x=0;
                while (x<3)
                {
                        int z=0;
                         z++;
                        for (int y=0;y<z ;y++ )
                        {
                                System.out.println("b.-++");
                        }
                        x++;
                        
                        System.out.println("z="+z);
初始x值是0,
x<3为true,定义变量z,自增后值是1,进入for循环;y初始是0,小于z=1,执行里面的程序,输出:b.-++  。
然后y自增变成1,不在满足y<z,for循环结束,x自增为1,然后输出z=1;
这是while的一次循环,接着还有两次循环,最后的结果是:
b.-++
z=1
b.-++
z=1
b.-++
z=1

作者: 李兴    时间: 2014-1-3 00:14
  1. int x=0;
  2.                 while (x<3)
  3.                 {
  4.                         int z=0;    //这个变量z为什么只是自增一次。
  5.                         for (int y=0;y<z ;y++ )  //这时y=0;z=0,所以y<z就是1<1逻辑判断为假,跳出循环,所以一次都不执行循环,也就不打印"AAA"了
  6.                         {
  7.                                 System.out.println("AAA");
  8.                         }
  9.                         x++;
  10.                         z++;   //为什么没有结果呢,不是应该打印2次AAA么??
  11.                         System.out.println("z="+z);
复制代码

作者: 未来希望    时间: 2014-1-3 00:23
因为z每次循环都初始化了,所以后面打印都只能看见z=1




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