可以在变量的右侧进行多少算术运算

时间:2016-08-01 08:32:24

标签: java math

for(int i = 1; i <= 5; i++) {
    for(int j = 1; j <= i; j++) {
        int a = i + j*2;
        System.out.print(a);
    }
}

运行上面的代码时,我输出为

3
46
579
681012
79111315

我无法理解为什么它按照逻辑将第一行打印为3,i + j * 2 = 4。

2 个答案:

答案 0 :(得分:5)

  

我无法理解为什么它按照逻辑将第一行打印为3,i + j * 2 = 4.

优先级。乘法优先于加法,因此在第一次调用时,i+j*21+1*2 1+(1*2)1+23

基本操作的优先级可以通过PEMDAS或BODMAS记住(“MD”和“AS”具有相同的优先级,所以我在这里将它们显示在一行上):

P          Parentheses / Brackets            B
E          Exponenentiation / Orders1        O
MD         Multiplication & Division         DM
AS         Addition and Subtraction          AS

1 权力(2 ^ 5),平方根等

Java网站有a page on operator precedence,其中包含以下表格:

postfix                expr++ expr--
unary                  ++expr --expr +expr -expr ~ !
multiplicative         * / %
additive               + -
shift                  << >> >>>
relational             < > <= >= instanceof
equality               == !=
bitwise AND            &
bitwise exclusive OR   ^
bitwise inclusive OR   |
logical AND            &&
logical OR             ||
ternary1               ? :
assignment             = += -= *= /= %= &= ^= |= <<= >>= >>>=

1 它们是指conditional operator,它是一个三元运算符(一个接受三个操作数的运算符),并且恰好是Java所拥有的。

答案 1 :(得分:1)

乘法(*)的算术优先级高于加法(+)。在第一次迭代中,ij都是1。要计算的第一件事是j*2,即1*2=2。然后我们添加i和之前计算的产品,并获得1+2=3