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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© hg3093483 中级黑马   /  2013-3-26 21:06  /  2044 人查看  /  10 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 hg3093483 于 2013-3-26 23:07 编辑

int i = 0;  
  for (i++; i++ < 10; i++);  
    System.out.println(++i);  
请详细解释一下,谢谢啦

评分

参与人数 1技术分 +1 收起 理由
贾文泽 + 1

查看全部评分

10 个回复

倒序浏览
答案应该是13 ,一直循环到i=10的时候,接着走循环,先i++变成11,然后i++<10不成立,此时i变成12,然后输出++i,变成13

评分

参与人数 1技术分 +1 收起 理由
贾文泽 + 1

查看全部评分

回复 使用道具 举报
  1. for (i++; i++ < 10; i++,System.out.print(i+" ")); //你的for循环后面有个;号不知道是不是你故意的.
  2.                           System.out.println("i="+i);//12
  3.                     System.out.println(++i);  //13;
  4.                     //3 5 7 9 11 i=12
  5.                     // 13
复制代码
看结果意会
回复 使用道具 举报
本帖最后由 杨天宇 于 2013-3-26 21:26 编辑

答案就是1.
    int i = 0;  
  for (i++; i++ < 10; i++);  //如果这个循环括号外的分号去掉,答案就是3,6,9
    System.out.println(++i);  
回复 使用道具 举报
i=0;
i++<10;  //i=1
i++;  //i=2
i++<10;  //i=3
i++;   //i=4
……
i++<10  //i=8;
i++ ;   //i=9
i++<10   //++在右边,先进行其他运算再自增,9<10成立,循环继续,i自增得10
i++;   //i=11
i++<10  ;  //此时i<10不成立,跳出循环,但仍自增一次,得到i=12
输出++i,打印13

评分

参与人数 1技术分 +1 收起 理由
贾文泽 + 1

查看全部评分

回复 使用道具 举报
本帖最后由 杨明宁 于 2013-3-26 21:46 编辑

应该是前面i++时还是0;到i++<10还是0跟10比,因为是自增后所以到循环一次在执行前面两i++,然后i就等于2,再过来执行后面那个i++就=3了,回去又一次循环完了就=5,5再执行后面i++就=6了条件还满足,又再一次循环,完了之后就=8了,8再执行后面i++,就是9了,9再回去循环一次,i就=11了,因为是自增后所以是比较完自后再自增,所以是9<10比还满足条件,过去之后才执行前面那两自增,因为这次循环完了,自增完了之后,再执行后面那个i++,这样i就=12了,回去一比较条件不满足,跳出循环,执行输出语句,输出语句再来一次++i因为自增前所以就变成13,所以打印结果是13.
}

评分

参与人数 1技术分 +1 收起 理由
贾文泽 + 1

查看全部评分

回复 使用道具 举报
下面每一个 i 上面的数值是它对应的变化的值:结果是13

public static void main(String[] args) {
                int i = 0;  
               
        //                (1,5,9,13)    (2,6,10,结束)   (4,8,12)
                  for (i++;        i++ < 10;      i++);  //注意这里: i++ < 10; 它相当于是i<10,i++;
                  
                  //                     (3,7,11)
                    System.out.println(++i);  

        }

评分

参与人数 1技术分 +1 收起 理由
贾文泽 + 1

查看全部评分

回复 使用道具 举报
邵震 高级黑马 2013-3-26 21:41:49
8#
我知道结果是13,可是不知道楼主你要问啥?
回复 使用道具 举报
楼主你好   我来为你详细解答。
首先咱们看下你写的代码,你的代码for字段后面有一个“;”分号,很显然这个循环没有方法体,
那么你的代码我可以写成这样,用count变量来计算循环后的操作表达式运行了几次。

  1.          
  2.           int count = 0;
  3.           int i = 0;  
  4.          
  5.             for (i++; i++ < 10; i++,count++);
  6.                
  7.                     System.out.println(++i);  
  8.                     System.out.println(count);
复制代码
运行的结果是 i 的值为13,count执行了5次,下面说一下执行过程
当int=1进入for循环后先执行的是初始化表达式中的i++,这时i=1。
再执行循环条件表达式,不过i=1先比较是否小于10然后再自加,结果1<10,i自加了,这时候i=2,
循环开始执行方法体中的条件了,结果发现没有方法体,然后开始执行循环后的操作表达式,也就是第二个分号后面的i++
这时候i=3,count的值为1,已经执行了1次循环了,继续从for进入,依据条件继续判断。。。。

这时候当i=11的时候走到了判断条件表达式,这时候条件不成立了,退出的时候i=11还要执行循环后的操作表达式所以说i还要自加,这时候i=12.
count的执行了5次了,至于输出结果i再次自加,所以结果为13

评分

参与人数 1技术分 +1 收起 理由
贾文泽 + 1

查看全部评分

回复 使用道具 举报
循环5次, i = 11,最后判断一次, i+1  最后答案为13
回复 使用道具 举报
/*
在循环体中加入一个输出i值的语句,这样不会太乱
                  * for循环共执行5次
                  * 当第一次  i++<10    这时i=1; 走完判断条件后,i才会自增1    输出为2
                  *  第二次  走i++条件, 然后 i++<10;这时 i=3;走完判断条件后,i才会自增1    输出为4
                  * 第三次  走i++条件, 然后 i++<10;这时 i=5;走完判断条件后,i才会自增1    输出为6
                  * 第四次  走i++条件, 然后 i++<10;这时 i=7;走完判断条件后,i才会自增1    输出为8
                  * 第五次  走i++条件, 然后 i++<10;这时 i=9;走完判断条件后,i才会自增1    输出为10      
                  *   然后走i++条件,然后i++10;这时 i=11; 走完判断条件后不符合,i才会自增1    这时i值是12   
                  *    而循环体外输出++i;    所以输出为13  
                  * */
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马