循环产生意外结果

问题描述:

我希望在循环结束时,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,这应该使语句的第二部分假,循环将停止运行。但事实并非如此。

+0

改用'do while'循环。 –

+0

这是一个测试问题。我不明白为什么答案是-8和10. –

+0

'System.out.println(“y:”+ x);':你再次打印变量'x'。 – rgettman

随着while语句大于或第二条语句 等于,它会变为-2和7,并且应该使该语句的第二部分 为false并且循环将停止运行。

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

尝试了这一点:

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

提示:花的时间,现在来学习如何在IDE运行你的代码,并在调试器,通过它一步。

这是非常简单的,你想唯一的条件是,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) x/y) >= 0 

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

它通过(y != 10)得到了循环,因此y的值是10,同时x的值已经达到-8。