Java 为什么变量;bmi“;仅获取变量的值";重量;?
从命令行传递Java 为什么变量;bmi“;仅获取变量的值";重量;?,java,Java,从命令行传递javaname801.9,输出为“80”。 为什么除法和乘法被完全忽略了 在“长度*长度”周围加上括号可以解决这个问题。因为双倍bmi=重量/长度*长度=重量与双倍bmi=重量/(长度*长度)不同 在第一种情况下,您得到的结果与不使用任何括号的结果相同 /和*具有相同的优先级,因此重量/长度*长度意味着(重量/长度)*长度@Kristjan Link,这是因为运算符的优先级,当您编写重量/(长度*长度)时,会增加乘法的优先级,因为括号内运算符的优先级总是大于括号外运算符的优先级 使
javaname801.9
,输出为“80”。
为什么除法和乘法被完全忽略了
在“长度*长度”周围加上括号可以解决这个问题。因为双倍bmi=重量/长度*长度=重量与
双倍bmi=重量/(长度*长度)不同 在第一种情况下,您得到的结果与不使用任何括号的结果相同
/
和*
具有相同的优先级,因此重量/长度*长度
意味着(重量/长度)*长度@Kristjan Link,这是因为运算符的优先级,当您编写重量/(长度*长度)
时,会增加乘法的优先级,因为括号内运算符的优先级总是大于括号外运算符的优先级
使用括号可以修复它,因为它增加了*
运算符的优先级。通过使用括号,可以显式地赋予*
比/
更高的优先级,这就是为什么乘法表达式将首先执行,因为它的优先级增加了。*
和/
具有相同的优先级
注意:
但是请记住,尽管与*
具有相同的优先级,但还是先执行/
,因为它位于第一位。正如()
是提高优先级的一种方法,运算符的移位也是提高或降低运算符优先级的另一种方法。下面的表格显示了。在这方面将对您有所帮助。因为/的优先级高于。因此,您的代码只需执行“除以长度”和“乘以长度”即可返回权重。()具有比/更高的优先级,因此()中的代码将首先执行,结果是权重乘以长度除以一个数字,然后再乘以相同的数字,返回初始数字。这就是数学的工作原理,因为你先除以某物,然后马上再乘以它<代码>/
和*
具有同等的优先级,因此重量/长度*长度
意味着(重量/长度)*长度
。我把这和作业混淆了。同一行上的赋值(例如x=y+=z=1;)从右向左完成,其他二进制操作从左向右完成(例如5%2*3/6)。很抱歉
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);
}
}