循环产生意外结果
问题描述:
我希望在循环结束时,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,这应该使语句的第二部分假,循环将停止运行。但事实并非如此。
答
随着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。
改用'do while'循环。 –
这是一个测试问题。我不明白为什么答案是-8和10. –
'System.out.println(“y:”+ x);':你再次打印变量'x'。 – rgettman