在执行以下操作时,我很想看到一个奇怪的错误:
int width = 300;
int var1 = width/3;
int var2 = width * 1/3;
int var3 = width * 2/3;
int var4 = width*(1/3);
int var5 = width * (int)(1/3);
int var6 = (int)(width*(1/3));
System.out.println("Var1: " + var1);
System.out.println("Var2: " + var2);
System.out.println("Var3: " + var3);
System.out.println("Var4: " + var4);
System.out.println("Var5: " + var5);
System.out.println("Var6: " + var6);
输出是这样的:
Var1: 100
Var2: 100
Var3: 200
Var4: 0
Var5: 0
Var6: 0
为什么最后三个操作返回0
?周围的括号1/3
似乎改变了它执行计算的方式,但甚至试图将其转换为int
也不会改变输出。
我正在使用BlueJ IDE
和Java version 1.7.0_17
编辑
我找到了答案。这是由于操作顺序。parens
除法首先发生的原因是int
1/3 或 2/3 总是等于0
。如果我允许width * 2
在除以3
一切之前发生就可以了,因为数字大于1
。
有时它只是基本的数学...... :)