为什么在执行后打印4和12?

时间:2017-04-22 22:06:54

标签: java

所以每当我跑步时,我得到4和12,但我不明白为什么会这样。我明白直到带有(y mod x == 1)的if语句是代码失败的地方。那么一旦这部分失败,为什么输出会说4和12?只是寻找一个很好的解释为什么这是。

public static void main(String[] args) {

    int x = 10, y = 0;
    while (x > 5)
    {
        y = 3;
        while (y < x)
        {
            y *= 2;
            if (y % x == 1)
                y += x;
        }
        x -= 3;
    }
    System.out.println(x + " " + y);
}

2 个答案:

答案 0 :(得分:2)

一步一步查看代码是个好主意:

int x = 10, y = 0;

所以这些是你的起始值。

while(x > 5)

由于10大于5,这个while循环将会运行。

y = 3

现在y变为3,所以x仍为10,y为3。

while(y < x)

这个while循环将运行,因为3小于10。

y *= 2

因此,y = 3 * 2 = 6,所以现在x为10,y为6。

if(y % x == 1)

这是 NOT 的情况,因为6%10等于6.现在第二个while循环while(y < x)将继续(因为6仍然小于10),所以y变为12。但是,因为if语句仍然不正确,所以while循环将结束(因为12不小于10)。因此,作为第一个while循环的一部分,你必须减去3的x,所以x变为10 - 3 = 7.

然后,你回到第一个while循环,看看x是否仍然大于5.这是这种情况,因为x = 7和7&gt; 5,所以第一个while循环将再次运行。现在,y再次变为3,第二个while循环将运行,因为3&lt; 7.然后y变为6并且if语句再次不正确,因此不会运行。现在我们再次检查第二个while循环:是6&lt; 7?是的,所以y变为6 * 2 = 12.再次,if语句将无法运行。是12&lt; 7?不,所以第二个while循环将结束,作为第一个while循环的一部分,你必须从x中减去3,所以x = 7 - 3 = 4.

最终结果:x = 4且y = 12.

答案 1 :(得分:1)

我建议创建一个这样的表:

LOC | x | y
------------
    |   |

现在仔细检查每行代码并写入两个变量的值。继续一步一步,包括while循环的所有重复。 (LOC代表“代码行”。这应该是每一步的代码行数。)如果您在心理上正确执行代码,您将看到最终输出是什么。如果您没有通过此练习获得预期结果,请编辑您的问题以向我们展示您的手册表,我们可以从那里获得帮助。