一个有趣的for循环面试题 请教高手,这个for循环的结果是什么,怎么得的?我知道结果,就是不明白原理,请高手不吝赐教! int i = 0;for (i++; i++ < 10; i++) ;System.out.println(++i); 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 没什么意思,就是 考一些基础的东西int i=0;System.out.println(i++);System.out.println(i);System.out.println(++i);System.out.println(i); 这个结果不对,这题的结果是13,如果sysout(i++)的话,结果就是12,现在我不太明白12是怎么得的 i++是先把i传递出来后++;++i是先++后传递数值就是13了。 int i = 0; for (i++; i++ < 10; i++){ System.out.println(i); } System.out.println(++i);改写成这样就好理解了。循环体里打印的最后一个数字是10.我相信这之前你都理解。可能你的思维有点没转过来。剩下的步骤也很简单。结果是13当打印完10的时候会去执行i++,这个时候是11,然后他会去判断i++ < 10这个表达式。其结果为false也就是不执行循环体里的代码。但是i已经变成了12.接着跳出循环体。打印++i 先加再打印。 也就是13了。 i=0;for(){i=1;1<10,i=2;i=3;i=4;4<10,i=5;i=6;i=7;7<10,i=8;i=9;i=10;10<10,i=11;i=12;到此不再循环;}到输出:++i就输出13;i++就输出12;道理就是我刚才说的了 int i = 0;for (i++; i++ < 10; i++) ;相当于for (i++; i++ < 10; i++) {};//执行完后的结果i=12System.out.println(++i); LZ大人。for循环的执行顺序是这个样子的:eg: for(A,B,C)A一辈子只会执行一次。B每次循环都会执行,若为真则执行循环体。若假则跳出循环。若无循环体就执行C,接着再判断B总的执行顺序就是A,B,循环体,C,B,循环体,C...一直这样下去。直到B的结果为false。剩下的就是++i和i++的区别了。前者是先加再执行。后者是先执行再加。一步一步再仔细看一遍 for (0++; i++ < 10; i++)for (i++; 1++ < 10; i++)for (i++; i++ < 10; 2++)for (i++; 3++ < 10; i++)for (i++; i++ < 10; 4++)for (i++; 5++ < 10; i++)for (i++; i++ < 10; 6++)for (i++; 7++ < 10; i++)for (i++; i++ < 10; 8++)for (i++; 9++ < 10; i++)for (i++; i++ < 10; 10++)for (i++; 11++ < 10; i++)估计你就是这个地方晕了。11++ < 10这个表达式的值是false,虽然false了,但是他还得++啊。跳出循环的时候就是12了。sysout的时候打印的是++i,所以就是13了。LZ这个循环一点都没趣。 如果我是面试官,谁要是把 for 循环写成这样,我会立马让其放下笔离开! 只需从9开始考虑。9比较之后++=10然后执行之后的i++即11然后再比较i++<10此时i是11比较后为12.最后执行输出++i=13 一对多,一修改后,多的外键被清空了。 用程序如何快速获取网页的title,不下载整个网页 (java) tomcat运行jsp的原理 log4j中HTMLLayout的问题 跳槽深圳工资 招hibernate高手帮小弟解决一个问题!!! tomcat 与 jdk 问题,急等到 JAVA并行Run一个Exec Class 在配置 tapestry 时,要怎么样安装ant 如何在java中得到当前工程的CLASS在计算机中的绝对路径地址! 关于session.setMaxInactiveInterval 继承中强制转换的问题
int i=0;
System.out.println(i++);
System.out.println(i);
System.out.println(++i);
System.out.println(i);
++i是先++后传递数值就是13了。
for (i++; i++ < 10; i++){
System.out.println(i);
}
System.out.println(++i);改写成这样就好理解了。
循环体里打印的最后一个数字是10.我相信这之前你都理解。
可能你的思维有点没转过来。剩下的步骤也很简单。结果是13
当打印完10的时候会去执行i++,这个时候是11,然后他会去判断i++ < 10这个表达式。
其结果为false也就是不执行循环体里的代码。但是i已经变成了12.
接着跳出循环体。打印++i 先加再打印。 也就是13了。
for(){
i=1;1<10,i=2;i=3;
i=4;4<10,i=5;i=6;
i=7;7<10,i=8;i=9;
i=10;10<10,i=11;i=12;到此不再循环;
}
到输出:++i就输出13;i++就输出12;道理就是我刚才说的了
for (i++; i++ < 10; i++) ;相当于for (i++; i++ < 10; i++) {};//执行完后的结果i=12
System.out.println(++i);
for循环的执行顺序是这个样子的:
eg: for(A,B,C)
A一辈子只会执行一次。
B每次循环都会执行,若为真则执行循环体。若假则跳出循环。若无循环体就执行C,接着再判断B总的执行顺序就是A,B,循环体,C,B,循环体,C...一直这样下去。直到B的结果为false。
剩下的就是++i和i++的区别了。前者是先加再执行。后者是先执行再加。
一步一步再仔细看一遍
for (i++; 1++ < 10; i++)
for (i++; i++ < 10; 2++)
for (i++; 3++ < 10; i++)
for (i++; i++ < 10; 4++)
for (i++; 5++ < 10; i++)
for (i++; i++ < 10; 6++)
for (i++; 7++ < 10; i++)
for (i++; i++ < 10; 8++)
for (i++; 9++ < 10; i++)
for (i++; i++ < 10; 10++)
for (i++; 11++ < 10; i++)
估计你就是这个地方晕了。
11++ < 10这个表达式的值是false,虽然false了,但是他还得++啊。
跳出循环的时候就是12了。
sysout的时候打印的是++i,所以就是13了。LZ这个循环一点都没趣。