为什么变量“ bmi”仅获得变量“ weight”的值?

时间:2018-11-10 12:41:50

标签: java

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”。 为什么除法和乘法被完全忽略?

在“长度*长度”周围加上括号可以解决此问题。

3 个答案:

答案 0 :(得分:0)

因为 double bmi =体重/长度*长度=体重
不一样 double bmi =体重/(长度*长度)< / strong>

在第一种情况下,您最终会得到与不使用任何括号相同的结果。

/*的优先级相同,因此weight / length * length的意思是(weight / length) * length

答案 1 :(得分:0)

@Kristjan链接,这是因为运算符的优先级,当您写weight / (length * length)时,您会增加乘法*的优先级,因为括号内的运算符的优先级始终大于括号外的运算符

使用括号可以解决此问题,因为它会增加*运算符的优先级。通过使用括号,您显式地赋予*/更高的优先级,这就是为什么乘法表达式由于其更高的优先级而将首先执行,否则*/都具有相同的优先级。

注意:

但是请记住,尽管优先级相同,/*优先执行,因为它优先。就像()是增加优先级的方法一样,运算符的移位位置是增加或减少运算符优先级的另一种方法。表here中存在。在这方面将对您有帮助。

答案 2 :(得分:-1)

因为/的优先级高于。因此,您的代码仅执行除法并乘以长度即可返回权重。 ()的优先级高于/,因此()中的代码将首先执行,从而导致权重乘以长度 length