private int mCurrentIndex = 0;
mPrevButton = (Button)findViewById(R.id.prev_button);
mPrevButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
mCurrentIndex = (-33 % 5);
Log.i("IndexClick", String.valueOf(mCurrentIndex));
}
});
这是返回-3而不是2.它使用正数进行数学运算。请帮忙似乎无法找到解决方案。
答案 0 :(得分:4)
使用%
运算符,余数的符号必须与被除数的符号匹配(或为0),根据JLS, Section 15.17.3:
二进制数字提升(第5.6.2节)后整数操作数的余数运算产生的结果值使得(a / b)* b +(a%b)等于a。
从该规则可以得出,只有当被除数为负时,余数运算的结果才可以是负数,只有在被除数为正数时才能为正数。而且,结果的大小总是小于除数的大小。
事实上,(-33/5)*5 + (-33%5)
变为-6*5 + (-3)
等于-33
。
要获得积极的结果,您必须有正的红利。
答案 1 :(得分:0)
根据JLS:
整数操作数的余数运算...产生一个结果值,使得(a / b)* b +(a%b)等于a。
在您的示例中,a = -33且b = 5.因此:
(a/b)*b+(a%b) = -33
(-33/5)*5+(-33%5) = -33
(-6)*5+(-33%5) = -33
-30+(-33%5) = -33
(-33%5) = -3, as expected