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

分享 昨天晚上迅雷的一道笔试题
Java code


public class Test  {
    public static void main(String[] args){
        int k=0;
        int j=0;
        int w=0;
        for(int i=0;i<5;i++){
            if(++k>2&&j++>2&&++w>2){
                k++;
                ++j;
                ++w;
            }
        }
        System.out.println("k="+k+"  "+"j="+j+"  "+"w="+w);
    }
}




写出输出结果

------解决方案--------------------
k=5 j=3 w=0

就是考察 
i++ 和 ++i
&& 运算

第1次,++k=1, && 运算fail,所以只有 k变成1,j,w不变
第2次,++k=2, && 运算fail,所以只有 k变成2,j,w不变
第3次,++k=3, j++=1, && 运算fail,所以 k变成3,j变成1, w不变
第4次,k=4,j=2,w=0
第5次, k=5,j=3,但是j++返回值是2, 最后一个&&运算没有调用 ++w
------解决方案--------------------
探讨

k=5 j=3 w=0

就是考察
i++ 和 ++i
&amp;&amp; 运算

第1次,++k=1, &amp;&amp; 运算fail,所以只有 k变成1,j,w不变
第2次,++k=2, &amp;&amp; 运算fail,所以只有 k变成2,j,w不变
第3次,++k=3, j++=1, &amp;&amp; 运算fail,所以 k变成3,j变成……

------解决方案--------------------
k=5 j=3 w=0

------解决方案--------------------
考察的是 (++k>2) && (j++>2) && (++w>2) 只要一个表达式结果为false, 整个表达式就被终止了.
------解决方案--------------------
看来我理解的有些偏差了
------解决方案--------------------
这题其实适合初学者。
------解决方案--------------------
这个嘛。。。运行一遍就知道结果了,知道结果就知道原因了
------解决方案--------------------
k=5 j=3 w=0
&&是短路运算
第1次,++k, k变为1,1>2不成立,遇到短路&&,所以只有 k变成1,j,w不变
第2次,++k, k变为2,2>2不成立,遇到短路&&,所以只有 k变成2,j,w不变
第3次,++k, k变为3,3>2成立,运算j++, ++在变量后面,先运算j>2,因为j=0,0>2不成立 运算j
++,j变为1,遇到短路&&,所以k变成3,j变成1,w不变还是0
第4次,++k,k变为4,4>2成立,运算j++, ++在变量后面,先运算j>2,因为j=1,1>2不成立 运算j
++,j变为2,遇到短路&&,所以k变成4,j变成2,w不变还是0
第5次,++k,k变为5,5>2成立,运算j++, ++在变量后面,先运算j>2,因为j=2,2>2不成立 运算j
++,j变为3,遇到短路&&,所以k变成5,j变成3,w不变还是0
至此,循环结束
条件没一次符合,没有执行过循环体
最后输出 k=5 j=3 w=0


------解决方案--------------------
没有执行if中的循环体
------解决方案--------------------
介个要是笔试题俺也无语了
------解决方案--------------------
好好学习了
------解决方案--------------------
第一条件为flase &&后面的条件就不执行了
------解决方案--------------------
MD 忘记短路了..
------解决方案--------------------
题不错,思想重要啊
------解决方案--------------------
探讨
k=5 j=3 w=0

------解决方案--------------------
新手学习下
------解决方案--------------------
MD,到现在才知道简单的东西掌握的也不是很牢靠

------解决方案--------------------