黑马程序员技术交流社区

标题: (已解决)关于for循环问题 [打印本页]

作者: 胡卿    时间: 2012-6-7 22:56
标题: (已解决)关于for循环问题
本帖最后由 胡卿 于 2012-6-8 21:44 编辑

class XunHuan
{
        public static void main(String[] args)
  {
                int n,i,j;
                n=5;        
        for (i=1;i<n;i++)
        {   
        
         System.out.print(" ");
         System.out.print(i);
        }
     for(j=n;j<2*n;j++)
     {
        for(i=n;i>0;i--)
        {
        System.out.print(" ");
        System.out.print(i);        
        }
     }
        System.out.println();        

  }
}




为什么结果是:1 2 3 4 5 4 3 2 1 5 4 3 2 1 5 4 3 2 1 5 4 3 2 1 5 4 3 2 1
而不是:1 2 3 4 5 4 3 2 1
作者: 包晗    时间: 2012-6-7 23:04
本帖最后由 包晗 于 2012-6-7 23:07 编辑
  1. for(j=n;j<2*n;j++)
  2.      {
  3.         for(i=n;i>0;i--)
  4.         {
  5.         System.out.print(" ");
  6.         System.out.print(i);        
  7.         }
复制代码
你的第一个循环 输出1-4
第2个开始输出
两层for循环嵌套。j=n;j<2*n;j++
n=5;n<10;j++ 这代表你要循环5次.(56789)
j=n;j<2*n;j++每循环一次
for(i=n;i>0;i--)
每一次都循环5次    输出54321   

输出5个(54321)

作者: 杨天皓    时间: 2012-6-7 23:06
  1. for (j = n; j < 2 * n; j++) {
  2.                         for (i = n; i > 0; i--) {
  3.                                 System.out.print(" ");
  4.                                 System.out.print(i);
  5.                         }
  6.                 }
复制代码
你这段代码的内循环,控制打印5,4,3,2,1
你外循环控制次数,你循环打印了5次。
作者: 朝哥    时间: 2012-6-7 23:17
读代码:
第一个循环输出为
1 2 3 4
此时n还是等于5,第二次的嵌套循环输出为
5 4 3 2 1 5 4 3 2 1 5 4 3 2 1 5 4 3 2 1 5 4 3 2 1
加上前面的代码就是。

lz想到自己的输出结果,嵌套循环就不用了,你得读代码,读懂了自然就会得到你想要的结果。
int n,i,j;
                n=5;        
        for (i=1;i<n;i++)
        {         
                        System.out.print(" ");
                        System.out.print(i);
        }
               
                上面的for循环与下面的for循环没关系
                for(i=5;i>0;i--)
                {
                        System.out.print(" ");
                        System.out.print(i);        

                }


作者: 王杰    时间: 2012-6-7 23:21
  1.     for(j=n;j<2*n;j++)
  2.      {
  3.         for(i=n;i>0;i--)//这里循环嵌套了 不就是打印了五次1到5了吗?
  4.         {
  5.         System.out.print(" ");
  6.         System.out.print(i);        
  7.         }
复制代码

作者: 杨天皓    时间: 2012-6-7 23:28
  1. int num = 5;
  2.                 for (int i = 0; i <= num;) {
  3.                         System.out.println(++i);
  4.                         if (i == num) {
  5.                                 for (int j = num; j > 0;) {
  6.                                         System.out.println(--j);
  7.                                         if (j == 1)
  8.                                                 return;
  9.                                 }
  10.                         }
  11.                 }
复制代码
这个可以达到你要的效果

作者: 邵阳    时间: 2012-6-7 23:30
本帖最后由 邵阳 于 2012-6-7 23:39 编辑

class XunHuan
{
        public static void main(String[] args)
  {
                int n,i,j;
                n=5;        
       for (i=1;i<n;i++)
        {   
        
         System.out.print(" ");
         System.out.print(i);
        }   
                                //这是一个for循环,所以连续执行4次,输出1 2 3 4 直到i=5不满足i<n,跳出循环。执行下个程序
     for(j=n;j<2*n;j++)         //楼主可改成for(j=n;j<=n;j++)可以输出1 2 3 4 5 4 3 2 1
     {
        for(i=n;i>0;i--)
        {
        System.out.print(" ");
        System.out.print(i);        
        }
     }
                                     /*这是个标准的嵌套循环。第一个for是控制循环的次数,需要执行5次。第二个for里面的程序编译结果是5  4  3  2  1  当i=0时,不满足条件,跳出循环。然后再次执行第一个for,满足条件的话,执行第二个for里面的程序,再次输出5  4  3   2  1 。*/
        System.out.println();        

  }
}


作者: 张棣    时间: 2012-6-8 11:34
本帖最后由 张棣 于 2012-6-8 14:56 编辑

楼主:我们要先搞明白,for循环的特点,和for循环嵌套的特点、

还要注意:代码从主函数依次阅读看懂、并且要明确每段代码所能完成的功能、

class XunHuan
{
        public static void main(String[] args)
  {
                int n,i,j;
                n=5;        
        for (i=1;i<n;i++)//for 循环(一):这个for循环结束打印输出:1 2 3 4
        {   
        
         System.out.print(" ");
         System.out.print(i);
        }
     for(j=n;j<2*n;j++)//for 循环(二):这是一个循环嵌套的for循环,嵌套下面的for循环、此循环会循环5次、
     {
        for(i=n;i>0;i--)/*for 循环(三):这个for循环结束打印输出: 5 4 3 2 1,
                                 注意:for 循环(三)嵌套在for 循环(二)里,for 循环(三)结束后,for 循环(二)会继续循环,不会结束的。
                                           for 循环(二)每循环一次打印一次for 循环(三)的结果:5 4 3 2 1直到for 循环(二)循环5次后结束、
                                           最后打印结果:1 2 3 4 5 4 3 2 1 5 4 3 2 1 5 4 3 2 1 5 4 3 2 1 5 4 3 2 1
                                                                   --------- ----------- ----------- ------------ ----------- -----------
                                                               
*/
                                          
                             
        {
        System.out.print(" ");
        System.out.print(i);        //这两个输出可以写成:System.out.print(" "+i);
        }
     }
        System.out.println();        

  }
}




为什么结果是:1 2 3 4 5 4 3 2 1 5 4 3 2 1 5 4 3 2 1 5 4 3 2 1 5 4 3 2 1
而不是:1 2 3 4 5 4 3 2 1    //你这个结果是:for 循环(三)结束后,你没有继续思考到执行for 循环(二),因为for 循环(二)没有结束、

重要的是楼主多把:语句的功能、语法、注意事项、思路等,弄明白清楚就OK




作者: 葛奎    时间: 2012-6-8 13:51
  1. class Test3
  2. {
  3.         public static void main(String[] args)
  4.   {
  5.                 int n,i,j;
  6.                 n=5;      
  7.         for (i=1;i<n;i++)
  8.         {   
  9.       
  10.          System.out.print(" ");
  11.          System.out.print(i);
  12.         }//打印结果是: 1 2 3 4
  13.      for(j=n;j<2*n;j++)//j=5;j<10;j++  这是大循环,循环了5次
  14.      {
  15.         for(i=n;i>0;i--)//i=5;i>0;i--    这是小循环,也循环了5次
  16.         {
  17.         System.out.print(" ");
  18.         System.out.print(i);      
  19.         }//小循环打印结果是: 5 4 3 2 1
  20.      }
  21.          //大循环打印了5次小循环的结果  也就是 5 4 3 2 1 5 4 3 2 1 5 4 3 2 1 5 4 3 2 1 5 4 3 2 1
  22.          //所以最终结果加上上面打印的 1 2 3 4就是: 1 2 3 4 5 4 3 2 1 5 4 3 2 1 5 4 3 2 1 5 4 3 2 1 5 4 3 2 1
  23.         System.out.println();     
  24.         ///你想要的结果是:1 2 3 4 5 4 3 2 1
  25.         //你没有必要写嵌套循环了,把上面的大循环去掉就行了,要里面的小循环就能得出你要的结果

  26.   }
  27. }
复制代码





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