黑马程序员技术交流社区

标题: for循环 [打印本页]

作者: 黑马小符    时间: 2015-3-26 21:42
标题: for循环
class forDemo01
{
  public static void main(String[] args)
   {
      for(int x=0;x<5;x++)
      {
         for(int y=x;y<5;y++)
         {
            System.out.print("*");
           }
         System.out.println();
        }
    }
}
  打印:   
         *****
         ****
         ***
         **
         *

求各位大侠赐教上面的代码是怎么一步步的循环实现的,求详细讲解!


作者: danlyalex    时间: 2015-3-26 21:42
  1. public class Test {
  2.         public static void main(String[]args){
  3.          for(int x=0;x<5;x++)
  4. {
  5.          
  6.                 for(int y=x;y<5;y++)
  7. {
  8.          
  9.                    System.out.print("*");
  10.          
  11.                  }
  12.          
  13.                  System.out.println();
  14.         
  15.         }
  16.    
  17. }
  18. }
复制代码
首先。我们来看你这个代码,有两个for循环,其中控制x的是外部循环,外部循环控制行数,控制y的是内部循环,内部循环控制列数,
因此我们看到,当x=0时,外部for循环执行,x=0是小于5的,所以为true,进入内部循环,进来内部for循环后,y=x=0,是小于5的,因此内部for循环也为true,所以执行一次内部for循环的语句 打印输出 一个 *,这里要看清楚,是System.out.print("*"); 这里的print是不回车的,然后内部循环继续进行,y++后,y=1,还是小于5的,继续在第一行打印出来*.以此类推,直到y++到y=4时,一共是在第一行打印了5个*号,再y++后y=5就不满足y<5的条件了,因此内部for循环此时为false,停止输出*号,然后会执行下一个System.out.println()(注意:此行代码是回车空一格),然后执行x++,加完后x=1,而跳回到外部for循环,此时x=1时已经是到第二行了,再进行内部for循环。我说的太繁杂了。待会给楼主帖几篇我自己写的CSDN的学习笔记博客,我也是初学者。一起加油


作者: Itboy    时间: 2015-3-26 22:21
我怎么感觉你打印的写反了啊?
作者: Itboy    时间: 2015-3-26 22:34
好吧,我刚刚看错了,不好意思。我分析下试试吧,不好求见谅,仅限于交流。
      一开始进入外边的for循环,x=0,条件成立,进入循环内部
      进入内循环,将x付给y,判断条件,成立,继续执行,打印一个*,继续判断,打印*,直到打印5个*此时判断不成立,5不小于5,跳出内循环。
        执行外循环的输出结果,println 打印完需要换行,空输出不打印,直接换行。

   后边的以此类推,x增加一个,内循环中的*打印出来时就减少一个。





语言组织能力不好,求谅解,哪里没听懂,可以问我,我很有耐心的,嘿嘿
作者: danlyalex    时间: 2015-3-26 22:49
楼主。这是我自己码的基础代码。供你参考一下吧,我都是看传智播客的刘易老师视频自学的。
  1. /*
  2. 13:打印如下形状。
  3.         形状1:
  4.                 *****
  5.                 *****
  6.                 *****
  7.                 *****
  8. 解题思路:设y=0,y控制的是行数,x=0,x控制列数。用for循环嵌套使用。
  9.         形状2:
  10.                 *
  11.                 **
  12.                 ***
  13.                 ****
  14.                 *****
  15. 解题思路:只要把内部循环的x<=4改成x<=y就好。
  16.   */
  17. package control;

  18. public class ForForDemo {

  19.         public static void main(String[] args) {
  20.                 // TODO Auto-generated method stub
  21. //题目一:
  22.                 for(int y=0;y<=3;y++){
  23.               for(int x=0;x<=4;x++){
  24.                       System.out.print("*");//内部循环控制输出列,即y=0,x=0,1,2,3,4时都会输出*,记住用print("*")的话不自动换行。
  25.               }
  26.               System.out.println();//内部循环结束后跳到这里输出一个回车空格即println()会自动跳到下一行。
  27.       }
  28.         System.out.println("------------------------------------------------");
  29. //题目二:
  30.         for(int y=0;y<=5;y++){
  31.             for(int x=0;x<=y;x++){
  32.                     System.out.print("*");//内部循环控制输出列,即y=0,x=0时都会输出*,记住用print("*")的话不自动换行。
  33.             }
  34.             System.out.println();//内部循环结束后跳到这里输出一个回车空格即println()会自动跳到下一行。
  35.                 }
  36.         }
  37. }
复制代码


作者: 狂甩你十八条街    时间: 2015-3-26 23:15
你首先要知道for循环的作用,就是输出。然后你要知道它是怎么循环的,当x=0的时候,y=0的时候打印第一个*,
一次类推,第一个x循环结束时y循环执行了5次(这是x,y都等于0),第二次x循环 y执行了4次(因为这是y的值和x相等),以此类推,54321.还有,每当x执行完一次,要换行。
作者: 齐浩    时间: 2015-3-27 14:38
其实你只要明白了for循环里,分号隔开的三个语句的执行顺序,就全明白了//for(int x=0;x<5;x++){ }
作者: 向天笑    时间: 2015-3-27 14:44
齐浩 发表于 2015-3-27 14:38
其实你只要明白了for循环里,分号隔开的三个语句的执行顺序,就全明白了//for(int x=0;x ...

有道理,还要向你多学习啊
作者: l落落落叶    时间: 2015-3-27 16:49
外面的for是控制行数的,里面的for是控制列数的,也就是第一行的长度,比如x=0时,进入里面的for循环,运行5次,再返回外面的for循环,一直到外面的for循环停止为止
作者: sydie    时间: 2015-3-27 19:22
为了技术分,大家也是拼了,解答如此详细。。哈哈。
作者: wyk    时间: 2015-3-27 21:44
首先你的清楚外循环控制的是内循环的循环次数,内循环是用来控制每一行打印的*的个数,*呈递减的规律,所以内循环的次数应递减
作者: luoyu1530    时间: 2015-3-27 21:47
首先编译,JVM寻找主函数main,进入主函数,走第一个循环,执行X=0,判断x<5.正确,进入循环体,执行第二个循环,y=x,判断y<5,。正确,进入循环体,执行打印语句,然后,执行控制语句y++,判断Y<5.正确,然后继续执行打印语句,当y++到不小于5的时候,循环结束,打印换行,然后外循环执行X++,判断x<5是否正确,正确,执行循环体,y=x,y<5,执行打印,然后重复第一次的步骤,不满足条件了退出循环,执行外循环(x++),当执行到x>=5的时候,循环彻底结束,程序运行完毕
作者: 邓士林    时间: 2015-3-27 22:24
本来想拿你这一个币的,看到大家回答的如此详细,我就算了
作者: 黑马小符    时间: 2015-3-28 00:07
谢谢各位如此认真讲解1
作者: ym199210    时间: 2015-3-28 00:20
外层for控制循环的行数。内部for控制列数
作者: 右手年华    时间: 2015-3-28 21:27
外层for控制循环的行数。内部for控制列数
作者: 胡宗钊    时间: 2015-3-28 21:35
楼主帖子怎么删除了
作者: ym199210    时间: 2015-3-28 23:21
什么时候把这一个黑马币打赏了
作者: 李能甫    时间: 2015-3-29 08:37
for(int x=0,x<5;x++){//这是外层循环,每当x加一内层for循环都会循环到条件不成立为止。
      for(int y=x;y<5;y++)
         {
            System.out.print("*");//第一次进循环x等于0,y也等于0所以打印五次,第二次进入x等于1,y就等于一所以打印四次,以后依次类推,直到外层循环退出
           }
System.out.println();//这是每次打印换行
}
作者: ぃ鉲布奇诺    时间: 2015-3-29 11:18
第一个for 是打印的行数 ,第二个for是打印里面的内容,当第一行的for执行时,里面开始进行for循环输出内容,也就是4个'*',然后进行第二行的循环,依次类推.......
作者: 向天笑    时间: 2015-3-29 18:19
同问!!!!
作者: 风飘逸    时间: 2015-3-29 19:54
外层控制行,内层控制列,每列都会逐次少一个,所以内层循环每次少一,因为x每次加一,所以初始化内循环变量为y=x,到达每次列数少一的效果
作者: 小方的sunshine    时间: 2015-3-30 17:10
一般嵌套循环可以用于各种内外结合要解决的情况,
作者: Fench    时间: 2015-3-31 11:25
说的都好详细,还想来赚个黑马币. 既然前面说的那么详细,就算了吧:lol
作者: 杨大萌    时间: 2015-3-31 14:02
双重循环,外循环是控制行的,内循环是控制列的,你现在要打印的行是5,列随着行的增加而逐渐减一。所以内循环不能那样写了。
作者: 杨大萌    时间: 2015-3-31 14:06
双重循环,外循环是控制行的,内循环是控制列的,你现在要打印的行是5,列随着行的增加而逐渐减一。
  for(int x=0;x<5;x++)
       {
          for(int y=x;y<5;y++)
          {
             System.out.print("*");
            }
          System.out.println();
         }
  外循环每循环一次,打印一行列数为从x到5的“*”。打印完一行,换行。这样就打印出倒立三角形了
作者: cyr    时间: 2015-4-1 09:25
外层循环控制打印行数,,内层循环控制打印个数。
作者: xj刘博    时间: 2015-4-1 18:05
两层嵌套for循环,你只需要记住这句话就行了:第一层for控制打印的行数,第二次for循环控制列数
作者: 淡然无味    时间: 2015-4-4 00:24
首先要和你讲一下for循环的执行顺序,,,可以查看我的附件

所以,分析后的程序运行顺序是
进入主程序后,运行第一个for循环的条件
        1、x = 0 --> x<5 --> (进入第二个for循环)y = 0 --> y<5 --> 输出第一排第一个“*”;y++
        2、(还是在第二个for循环)y = 1 --> y<5 --> 输出第一排第二个“*”;y++
        3、(还是在第二个for循环)y = 2 --> y<5 --> 输出第一排第三个“*”;y++
        4、(还是在第二个for循环)y = 3 --> y<5 --> 输出第一排第四个“*”;y++
        5、(还是在第二个for循环)y = 4 --> y<5 --> 输出第一排第五个“*”;y++
        6、(这个时候就回到了第一个for循环)运行System.out.println() --> x++ --> x=1 --> x<5
        7、(进入第二个for循环))y = 1 --> y<5 --> 输出第二排第一个“*”;y++
        8、(还是在第二个for循环)y = 2 --> y<5 --> 输出第二排第二个“*”;y++
        。
        。
        。
        输出最后一个“*”后跳出第二个循环;运行System.out.println();跳出第一个循环
到这一步就完成整个函数的运行,结束程序的运行。

无标题.png (7.13 KB, 下载次数: 91)

无标题.png

作者: lingda21    时间: 2015-4-5 11:10
我是看了毕老师视频,说外层循环控制行数,内层循环控制列数,把自己写的代码多读几遍,脑海中想出它是怎么控制的就好
作者: 樱空之雪    时间: 2015-4-5 21:39
嵌套循环
作者: 1017161726    时间: 2015-4-6 12:39
x的值是0-5,
y的值是:01234
               1324
               234
               34
               4
y每次取值就是打印一个 *,x每次取值就是一个换行。
结果就是:5个 *,
                 4个 *,
                 3个 *,
                 2个 *,
                 1个 *,
作者: major2015    时间: 2015-4-6 19:58
双重循环,x控制行,y控制列,嗯,就是这样。
作者: q594254132    时间: 2015-4-7 15:41
2 个for循环输出
作者: 帆风顺    时间: 2015-4-7 23:42
外循环控制行数,内循环控制列数,这是一个倒三角,当“尖朝下时”要改变初始值,第一行不是输入五个星吗,第二行四个,第三行三个,经观察发现,它刚好与 x的变化一致,所以定义内循环y=x;就这样一步一步输出
作者: 可乐zj    时间: 2015-4-8 14:57
首先来到最外边的for循环,先定义一个x变量,值为0,满足x<5,然后执行内部的for循环,把x=0赋值给y,满足y<5,执行输出*,然后来到y++,变为1,仍满足此循环,继续执行内部for循环,一直到y=5,退出至外部循环共输出5个*,然后执行x++,得到x=1,满足x<5,执行内部循环,直至y=5,共输出4个*,以此类推,依次得到5,4,3,2,1个*
作者: 我没心没肺,。    时间: 2015-4-9 18:36
太简单了吧,。。。。。。。。。
作者: Jarywong    时间: 2015-4-11 00:00
楼主求币啊
作者: 时过境迁    时间: 2015-4-11 21:32
看结构,第一个 for对应的输出语句是 System.out.println(); 换行的意思   第二个for是输出打印*的。 x=0时满足x<5进入下面循环打印5次*,换行 x++(x=1)满足x<5 进入内循环  y=x(1)打印 4次*  换行 x++  .......
作者: 黑马小符    时间: 2015-4-12 11:41
谢谢了,收益匪浅啊
作者: 忆丶残梦顾惜    时间: 2015-4-13 21:20
写的不错赞一个
作者: 梦逆光377    时间: 2015-4-18 23:39
不1万就业不给1分钱学费




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