分享 昨天晚上迅雷的一道笔试题
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 && 运算 第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变成……
------解决方案-------------------- 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,到现在才知道简单的东西掌握的也不是很牢靠
------解决方案--------------------