以下程序的输出给了我,它只是没有点击。答案是6 3,这显然是我不理解的

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了以下程序的输出给了我,它只是没有点击。答案是6 3,这显然是我不理解的相关的知识,希望对你有一定的参考价值。

class ab {
    public static void main(String a[])
    {
        int x = 0, y = 0;

        for (int z = 0; z < 5; z++)
        {

            if (++x > 2 && ++y > 2)
            {
                x++;
            }
        }
        System.out.println(x + " " + y);
    }
}
答案

&&是一个短路算子,这意味着++y > 2++x至少是3之前不会被评估。在这种情况下,我们可以简单地添加调试消息,以获取x块之前和之后的yzif的值,以确切了解发生了什么(以及何时)。喜欢,

int x = 0, y = 0;
for (int z = 0; z < 5; z++) {
    System.out.printf("Before: x = %d, y = %d, z = %d%n", x, y, z);
    if (++x > 2 && ++y > 2) {
        System.out.printf("Inside: x = %d, y = %d, z = %d%n", x, y, z);
        x++;
    }
    System.out.printf("After:  x = %d, y = %d, z = %d%n", x, y, z);
}
System.out.println(x + " " + y);

这有希望澄清任何剩余的混乱

Before: x = 0, y = 0, z = 0
After:  x = 1, y = 0, z = 0
Before: x = 1, y = 0, z = 1
After:  x = 2, y = 0, z = 1
Before: x = 2, y = 0, z = 2
After:  x = 3, y = 1, z = 2
Before: x = 3, y = 1, z = 3
After:  x = 4, y = 2, z = 3
Before: x = 4, y = 2, z = 4
Inside: x = 5, y = 3, z = 4
After:  x = 6, y = 3, z = 4
6 3
另一答案

好吧,这很简单让我们第一次看看当z = 0 for循环到达if语句时,它首先检查左侧++i是预增量,所以i在比较之前变为1然后1> 2返回false而不检查第二部分。

现在qazxsw poi再次预增量和qazxsw poi再次条件返回false而y仍然为0

现在z = 1i = 2 z = 2返回true现在和现在将在i = 33>2预增量但返回false

现在yy=1然后z = 3再次返回i = 4 false

现在y =22>2and z= 4以及i = 5语句中的两个条件都返回true并且它的正文执行意味着x和x的后增量将是y = 3

现在ifx= 6循环条件返回false和循环中断,最后z = 5给出6和3

注意:如果条件只执行一次

另一答案

如果你发现你认为输出是for,你会忽略一个微妙的事实:

System.out.println(x + " " + y);

8 5运营商是一家短路运营商。这意味着右手操作数仅在左操作数为真时进行计算。

有一个非短路和操作员 - if (++x > 2 && ++y > 2) - 它总是评估两者;但这不是这里使用的。如果你用&&替换&,你确实得到了&&。如果在评估操作数时没有副作用,那么&8 5在逻辑上给出了相同的结果,所以&&被更频繁地使用(在某种程度上我不记得上次我在实际代码中读过布尔&,没关系写了一个)因为它避免了不必要的工作。

因此,在循环的前2次迭代中,&&递增而不增加&

之后,xy都会增加。

您可以通过使用调试器自己找到它,或者只是在每次循环迭代时打印出xy的值。你很快就会发现与纸上工作的区别。

以上是关于以下程序的输出给了我,它只是没有点击。答案是6 3,这显然是我不理解的的主要内容,如果未能解决你的问题,请参考以下文章

没有得到我想要的输出

jupyter notebook 和 spyder 没有从 anaconda 提示符启动。但是它之前工作正常。它给了我以下错误:

函数的输出应该是双倍的,但它给了我整数

plist 输出值的问题

AEM 6.3 中的页面激活失败

运行我的 C++ 代码给了我一个空白控制台