public class P2A7 {
public static void main(String[] args) {
String name = args[0];
int weight = Integer.parseInt(args[1]);
double length = Double.parseDouble(args[2]);
double bmi = weight / length * length;
System.out.println(bmi);
}
}
从命令行传递java Name 80 1.9
得到输出“ 80”。
为什么除法和乘法被完全忽略?
在“长度*长度”周围加上括号可以解决此问题。
答案 0 :(得分:0)
因为 double bmi =体重/长度*长度=体重与
不一样 double bmi =体重/(长度*长度)< / strong>
在第一种情况下,您最终会得到与不使用任何括号相同的结果。
/
和*
的优先级相同,因此weight / length * length
的意思是(weight / length) * length
答案 1 :(得分:0)
@Kristjan链接,这是因为运算符的优先级,当您写weight / (length * length)
时,您会增加乘法*
的优先级,因为括号内的运算符的优先级始终大于括号外的运算符
使用括号可以解决此问题,因为它会增加*
运算符的优先级。通过使用括号,您显式地赋予*
比/
更高的优先级,这就是为什么乘法表达式由于其更高的优先级而将首先执行,否则*
和/
都具有相同的优先级。
注意:
但是请记住,尽管优先级相同,/
比*
优先执行,因为它优先。就像()
是增加优先级的方法一样,运算符的移位位置是增加或减少运算符优先级的另一种方法。表here中存在。在这方面将对您有帮助。
答案 2 :(得分:-1)
因为/的优先级高于。因此,您的代码仅执行除法并乘以长度即可返回权重。 ()的优先级高于/,因此()中的代码将首先执行,从而导致权重乘以长度 length