日期:2014-05-20  浏览次数:20760 次

一个有趣的for循环面试题
请教高手,这个for循环的结果是什么,怎么得的?我知道结果,就是不明白原理,请高手不吝赐教!

int i = 0;
for (i++; i++ < 10; i++) ;
System.out.println(++i);

------解决方案--------------------
没什么意思,就是 考一些基础的东西
int i=0;
System.out.println(i++);
System.out.println(i);
System.out.println(++i);
System.out.println(i);
------解决方案--------------------
i++是先把i传递出来后++;
++i是先++后传递数值就是13了。
探讨

引用:
输出为:
3
6
9
这个结果不对,这题的结果是13,如果sysout(i++)的话,结果就是12,现在我不太明白12是怎么得的

------解决方案--------------------
Java code
        int i = 0;
        for (i++; i++ < 10; i++){
            System.out.println(i);
        }
        System.out.println(++i);

------解决方案--------------------
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;道理就是我刚才说的了
探讨

有才,对,为什么传出来的时候是12呢???
引用:
i++是先把i传递出来后++;
++i是先++后传递数值就是13了。

引用:

引用:
输出为:
3
6
9
这个结果不对,这题的结果是13,如果sysout(i++)的话,结果就是12,现在我不太明白12是怎么得的

------解决方案--------------------
探讨
Java code

int i = 0;
for (i++; i++ < 10; i++){
System.out.println(i);
}
System.out.println(++i);


改写成这样就好理解了。
循环体里打印的最后一个数字是10.我相信这之前你都理解。
可能你的……

------解决方案--------------------
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 循环写成这样,我会立马让其放下笔离开!