A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© Zero霖 中级黑马   /  2014-3-27 21:24  /  1284 人查看  /  9 人回复  /   1 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 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);
        }
}

这是我在群里看到的题目,是测试基础知识的。不要运行代码,说出这两个循环有什么不同,除了在定义局部变量这方面不同以外。

评分

参与人数 1技术分 +1 收起 理由
itpower + 1

查看全部评分

9 个回复

倒序浏览
第一个for循环中 i、j 为局部变量,只能在for循环中使用。第二个for循环中的 i、j 为成员变量,在for循环之外也能使用(调用,修改等)。
回复 使用道具 举报
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初始化而使内层只能执行一次。

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

评分

参与人数 1技术分 +1 收起 理由
何伟超 + 1

查看全部评分

回复 使用道具 举报

就是这个!
回复 使用道具 举报
papercup 发表于 2014-3-27 22:09
第一个for循环中 i、j 为局部变量,只能在for循环中使用。第二个for循环中的 i、j 为成员变量,在for循环之 ...

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

这个没错~
回复 使用道具 举报
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);
               
                   }
           }
}}
回复 使用道具 举报
苏伯亚 发表于 2014-3-27 22:16
其实运用输出语句就可以自己找出问题的  我给你修改个你运行一下就很明显的
代码:
class Demo

我知道了,只是这题是用来测试基础的,就是不让输出看哈~
回复 使用道具 举报
  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.                                         }
复制代码

评分

参与人数 1技术分 +1 收起 理由
zzkang0206 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马