黑马程序员技术交流社区

标题: 循环基础题 [打印本页]

作者: Zero霖    时间: 2014-3-27 21:24
标题: 循环基础题
本帖最后由 Zero霖 于 2014-3-27 21:27 编辑

//循环1
for(int i=0;i<10;i++)
{
        for(int j=0;j<100;j++)
        {
                 System.out.println(i*100+j);
        }
}
---------------------------------------------
//循环2
int i=0,j=0;
for(;i<10;i++)
{
        for(;j<100;j++)
        {
                 System.out.println(i*100+j);
        }
}

这是我在群里看到的题目,是测试基础知识的。不要运行代码,说出这两个循环有什么不同,除了在定义局部变量这方面不同以外。
作者: papercup    时间: 2014-3-27 22:09
第一个for循环中 i、j 为局部变量,只能在for循环中使用。第二个for循环中的 i、j 为成员变量,在for循环之外也能使用(调用,修改等)。
作者: 苏伯亚    时间: 2014-3-27 22:10
for(int i=0;i<10;i++)
{
        for(int j=0;j<100;j++)
        {
                 System.out.println(i*100+j);
        }
}
这一个for循环是标准的for 嵌套的运用  所以一分析就可以得出会打印10*100共1000个数字。就是说会顺序打印出从0到999的所有数字。
int i=0,j=0;
for(;i<10;i++)
{
        for(;j<100;j++)
        {
                 System.out.println(i*100+j);
        }
}
而这一个是省略了第一个表达式而是在循环外赋值。则是只会顺序打印出从0到99的所有数字。执行顺序是执行一次外层循环吗,然后进入内层循环执行输出从0到99的所有数,然后跳出执行外层循环,执行9次外层循环并不再执行内层循环,程序结束。之所以这样是因为 第一次执行完内层循环时j 的值就为100。并且不再改变,所以在执行完一次后由于j的值不再符合执行条件而不再执行,只是执行外层循环,

在简单点说下流程  第一步 i=0,进入第二次循环执行i*100+j语句打印出从0到99的所有数字。打印出99后j的值为100,不在符合条件跳出内层循环,执行外层循环,这时i=1,j=100,不符合内层条件,不执行内层,接着执行i的自加,一直到i=10不符合条件 跳出循环,程序结束。
两个的区别就是第一个可以一直给内层J初始化为0,所以可以一直执行内层,而第二种则是不能重复给J初始化而使内层只能执行一次。

执行顺序就是这样。希望能帮到你。

作者: Zero霖    时间: 2014-3-27 22:12
苏伯亚 发表于 2014-3-27 22:10
for(int i=0;i

就是这个!
作者: Zero霖    时间: 2014-3-27 22:14
papercup 发表于 2014-3-27 22:09
第一个for循环中 i、j 为局部变量,只能在for循环中使用。第二个for循环中的 i、j 为成员变量,在for循环之 ...

额……这个不同我题目中已经排除了……
作者: yunzhongzhuhuo    时间: 2014-3-27 22:14
第一个for循环,外层执行10次,内层,每次都能执行100次,共1000次,共有1000个输出
而第二个for循环,外层会执行10次,内次却只能执行100次,因为j变量定义在外面,当i=0时,j运行100次后,j的值为100,而当i=1是,100<100不成立,就不会继续执行了
作者: Zero霖    时间: 2014-3-27 22:15
yunzhongzhuhuo 发表于 2014-3-27 22:14
第一个for循环,外层执行10次,内层,每次都能执行100次,共1000次,共有1000个输出
而第二个for循环,外层 ...

这个没错~
作者: 苏伯亚    时间: 2014-3-27 22:16
Zero霖 发表于 2014-3-27 22:14
额……这个不同我题目中已经排除了……

其实运用输出语句就可以自己找出问题的  我给你修改个你运行一下就很明显的
代码:
class Demo
{
        public static void main(String[] args)
        {
                int i=0,j=0;
                for(;i<10;i++)
        {
                        System.out.println("我是第一层"+i);
            System.out.println(j);
                 for(;j<100;j++)
                {
                  
                  System.out.println(i*100+j);
               
                   }
           }
}}
作者: Zero霖    时间: 2014-3-27 22:19
苏伯亚 发表于 2014-3-27 22:16
其实运用输出语句就可以自己找出问题的  我给你修改个你运行一下就很明显的
代码:
class Demo

我知道了,只是这题是用来测试基础的,就是不让输出看哈~
作者: 严旭晟    时间: 2014-3-28 16:08
  1. //#1
  2.                 for(int i=0;i<10;i++)
  3.                 {        for(int j=0;j<100;j++)
  4.                         {
  5.                  System.out.print(i*100+j+"  ");
  6.                         }
  7.                 }
  8.                 System.out.println();
  9.                 //#2
  10.                 int i=0,j=0;
  11.                 for(;i<10;i++)
  12.                 {        for(;j<100;j++)
  13.                         {
  14.                  System.out.print(i*100+j+" ");
  15.                         }
  16.                 }
  17.                 总结:功能:#1 内嵌变量独立的for循环   ; #2  内嵌共享变量的for循环
  18.                                             ----#2for嵌套时,内部for没有进行初始化,因此功能上与#1不同
  19.                                         效率:#1 对于内部for循环,对于每一轮外循环 j都要重新生成
  20.                                                     #2  内部for循环,变量j对任何一轮外循环都共享,无需重新开辟空间
  21.                                         总结:要想兼得功能和效率,兼#3版本
  22.                                         //#3
  23.                                         int i,j;
  24.                                         for(i=0; i<10; i++)
  25.                                         {  
  26.                                                 for(j=0;j<100;j++)//新一轮外循环时,仅仅初始化j而不是重新开辟空间
  27.                                                 {
  28.                                                         System.out.print(i*100+j+"  ");
  29.                                                 }
  30.                                         }
复制代码





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