首页 > 试题广场 >

有如下代码:请写出程序的输出结果。

[单选题]
有如下代码:请写出程序的输出结果。
public class Test
{
    public static void main(String[] args)
    {
        int x = 0;
        int y = 0;
        int k = 0;
        for (int z = 0; z < 5; z++) { 
            if ((++x > 2) && (++y > 2) && (k++ > 2))
            {
                x++;
                ++y;
                k++;
            }
        }
        System.out.println(x + ”” +y + ”” +k);
    }
}

  • 432
  • 531
  • 421
  • 523
推荐
每次循环z,x,y,k对应数值为:
0,1,0,0
1,2,0,0
2,3,1,0
3,4,2,0
4,5,3,1
执行完这次以后,z++为5,不再进入for循环。
编辑于 2015-07-26 22:02:47 回复(16)
z=0时候,执行++x > 2,不成立,&&后面就不执行了,此时 x=1,y=0,k=0;
z=1时候,执行++x > 2,还不成立 ,&&后面就不执行了,此时 x=2,y=0,k=0;
z=2时候, 执行++x > 2,成立,继续执行 ++y > 2, 不成立  , &&后面就不执行了, 此时 x=3,y=1,k=0;
z=3时候,执行++x > 2,成立,继续执行++y > 2,不成立  , &&后面就不执行了, 此时 x=4,y=2,k=0;
z=4 时候,执行++x > 2,成立,继续执行 ++y > 2, 成立  , 继续执行k++>2 ,不成立,此时仍没有进入for循环的语句中, 但此时 x=5,y=3,k=1;
z=5时候,不满足条件了,整个循环结束,所以最好打印时候: x=5,y=3,k=1;
发表于 2015-09-29 09:34:15 回复(29)
一、 运行截图


二、 详细步骤











发表于 2021-04-27 17:59:42 回复(1)
注重先后顺序
发表于 2020-03-04 22:08:00 回复(0)
第一次循环:x:1,y:0,k:0  
第二次循环:x:2,y:0,k:0
第三次循环:x:3,y:1,k:0  (此处为什么x后面的y为1,而上几次是0,因为用的是“&&”逻辑与,而不是“&”按位与)       
第四次循环:x:4,y:2,k:0     &&:表示在 if判断 第一个(++x > 2)等式成立后,方可执行后面的等式,否则后面的等式不执行。
第五次循环:x:5,y:3,k:1     &:表示不管 if判断 第一个(++x > 2)等式是否成立,都会执行后面的等式。
编辑于 2018-11-19 22:14:00 回复(0)
主要有个逻辑短路问题
发表于 2018-09-06 13:06:03 回复(0)
短路与  出现不满足的 后面均不执行
发表于 2018-08-31 09:49:10 回复(0)
双与运算,“前边都不满足直接不考虑后半部分”,运算过程如下:

z    x    y    k

0    1    0    0

1    2    0    0

2    3    1    0

3    4    2    0

4    5    3    1

发表于 2018-06-12 15:33:50 回复(1)
&是按位与,非短路逻辑与,&&是短路逻辑与,当一个条件不成立就不执行后面程序了
发表于 2018-02-01 12:32:09 回复(0)
这个题考逻辑思维,要多练才可以,
发表于 2017-10-30 07:55:50 回复(0)
考虑短路
发表于 2017-04-11 15:53:07 回复(0)
这个注意短路就行
发表于 2017-04-06 11:07:29 回复(0)
if中的三个判断不断往右推进,还未执行大括号里的操作,循环次数就结束了,输出5 3 1
发表于 2017-01-08 12:35:21 回复(0)
这道题的主要考点是&&的短路效应,即将多个条件使用&&并起来的时候,如果第一个条件不成立,后面的条件JVM不会去判断,哪怕后面是类似于  5/0这种运行一定会报错的表达式。这也是&& 和 &的区别之一,同理 || 也有相应的短路效应。
回归到这道题,++i>2在i=0和1的时候不成立,所以++y>2不会判断,所以++y不会生效,同理k也一样。所以这道 题的答案为5,3,1
发表于 2016-07-25 21:22:44 回复(0)

||和 &&都有短路特性

发表于 2016-06-03 22:06:31 回复(0)
本题考查点是if(....)中关系运算符的短路运算
对于&& :当第一个条件不满足时,后面的就不再计算
对于|| :当第一个条件满足时,后面的条件就不参与运算

发表于 2016-05-10 21:19:59 回复(0)
  1. &和&&都是逻辑运算符,都是判断两边同时真则为真,否则为假;但是&&当第一个条件不成之后,后面的条件都不执行了,而&则还是继续执行,直到整个条件语句执行完为止

发表于 2015-04-21 14:21:33 回复(5)
这道题一是要考虑z的值,然后是 && ,&&会先计算符号前面的表达式,如果前面的表达式为假,则不会执行后面的表达式,如果为真,则继续执行后面的表达式
发表于 2016-03-02 15:24:20 回复(0)
这道题目,关键是明白 &&具有短路功能,开始y和k都不会变化的。
发表于 2015-07-26 10:52:36 回复(0)
别被这题的 i++ 或者 ++i 欺骗。
真正考的知识点是逻辑运算符&&的短路特点。
&&:若干个条件,如果前面的条件返回false,那么后面不再判断,就是false;

所以 x 变成 3 的时候,才轮到 y;
接着 x 变成 5 的时候,y 变成 3 的时候,才轮到 k;
最后 k 只能为 1;

if 条件始终没成立过,所以 if 条件里面的操作 只是为了欺骗你判断
发表于 2015-10-16 14:57:12 回复(1)
1.100
2.200
3.310
4.420
5.531

发表于 2015-05-27 14:09:30 回复(1)