给出以下代码:
int p,k=8;
p=k*(++k-8);
System.out.println(p);
当++k
被求k=9
时,然后变成k*(9-8)
给出9*1
int p,k=8;
p=(++k-8)*k;
System.out.println(p);
但这给出9作为输出
答案 0 :(得分:5)
您与
相乘left side: k
right side: (++k-8)
正如您正确指出的那样,大括号优先。但是,您的程序仍然“从左到右”运行。因此,首先评估左侧,即k = 8
。然后评估右边,即(++k-8) = 1
。
现在我们已经确定了双方,可以将它们相乘:8*1 = 8
。
答案 1 :(得分:1)
这是您的代码编译的类文件:
int k = 8;
byte var10000 = k;
int k = k + 1;
int p = var10000 * (k - 8);
System.out.println(p);
答案 2 :(得分:-1)
似乎您的IDE首先正在评估括号内,该括号使k递增(8-> 9),然后将结果(1)与递增的k(9)相乘。
正如其他用户所说的,情况并非如此,您的环境中可能存在错误。
使用++ k时,k本身应保留为k,并且仅在当前代码行的末尾递增。
来自Java文档的增减演示代码
$ awk '
{
split($2,a,":") # separate hs, ms and sses
b[$1]+=a[1]*3600+a[2]*60+a[3] # sum them up as as seconds
}
END {
for(i in b) {
h=int(b[i]/3600) # separate hs
m=int((b[i]-3600*h)/60) # and ms
s=b[i]-3600*h-60*m # and sses
printf "%s %d:%02d:%02d\n",i,h,m,s # output
}
}' file
alibab 240:00:00
amazon 73:02:00
ebay 5:00:00