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。
答案 0 :(得分:5)
我无法理解为什么它按照逻辑将第一行打印为3,i + j * 2 = 4.
优先级。乘法优先于加法,因此在第一次调用时,i+j*2
为1+1*2
1+(1*2)
,1+2
为3
。
基本操作的优先级可以通过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,其中包含以下表格:
postfixexpr++ 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)
乘法(*
)的算术优先级高于加法(+
)。在第一次迭代中,i
和j
都是1
。要计算的第一件事是j*2
,即1*2=2
。然后我们添加i
和之前计算的产品,并获得1+2=3
。