循环产生意外结果

时间:2013-10-23 17:53:50

标签: java math

我希望当X等于0时循环结束。

表格应该是这样的

X  | Y
10 | 1
8  | 2
6  | 3
4  | 4
2  | 5
0  | 6

但是当我运行它时,我得到值x = -8和y = 10

int x = 10;
int y = 1;
while ((y != 10) && ((x / y) >= 0))
{
x -= 2;
y += 1;
}

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

如果while语句中的第二个语句大于或等于,则它将转到-2和7,这应该使语句的第二部分为false并且循环将停止运行。但事实并非如此。

3 个答案:

答案 0 :(得分:3)

  

while语句中的第二个语句大于或   相等,它会到-2和7,这应该是第二部分   声明为false,循环将停止运行。

-2 / 7使用整数运算等于零。

试试这个:

System.out.println((-2/7));

提示:现在花些时间了解如何在IDE中运行代码并在调试器中逐步执行代码。

答案 1 :(得分:0)

这很简单,你只想要x大于零的条件而且它就是这样的:)

    int x = 10;
    int y = 1;
    while ((y != 10) && (x > 0)) {
        x -= 2;
        y += 1;
    }

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

输出:

x: 0
y: 6

PS:你在这里发布的代码有错误,你打印变量x两次

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

应该是:

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

另请注意以下事项:

由于在Java中划分规则,这种情况不起作用。如果您将两个integers分开,则结果始终为integer向下舍入!

如果(x / y) >= 0小于x,则y会返回true。

要有这种划分的工作示例,你必须将例如double除以整数,它应该看起来像这样

((double) x / y) >= 0

答案 2 :(得分:0)

这是因为>=中的(x / y) >= 0)。 -2/7产生0并且它通过了条件。

它离开了(y != 10)的循环,因此y的值是10,同时x的值已经变为-8。