Java 为什么返回错误的模答案?

Java 为什么返回错误的模答案?,java,android,Java,Android,这将返回-3而不是2。它用一个正数做了正确的计算。请帮忙,我似乎找不到解决办法 使用%运算符,余数的符号必须与股息的符号匹配(或为0),根据: 二进制数字提升(§5.6.2)后的整数操作数的余数运算产生一个结果值,使得(a/b)*b+(a%b)等于a 根据这条规则,余数运算的结果只能在红利为负时为负,并且只能在红利为正时为正。此外,结果的大小总是小于除数的大小 事实上,(-33/5)*5+(-33%5)变成了-6*5+(-3),等于-33 要获得正结果,必须有正的红利。根据以下条件,使用%运算符

这将返回-3而不是2。它用一个正数做了正确的计算。请帮忙,我似乎找不到解决办法

使用
%
运算符,余数的符号必须与股息的符号匹配(或为0),根据:

二进制数字提升(§5.6.2)后的整数操作数的余数运算产生一个结果值,使得(a/b)*b+(a%b)等于a

根据这条规则,余数运算的结果只能在红利为负时为负,并且只能在红利为正时为正。此外,结果的大小总是小于除数的大小

事实上,
(-33/5)*5+(-33%5)
变成了
-6*5+(-3)
,等于
-33


要获得正结果,必须有正的红利。

根据以下条件,使用
%
运算符,余数的符号必须与红利的符号匹配(或为0):

二进制数字提升(§5.6.2)后的整数操作数的余数运算产生一个结果值,使得(a/b)*b+(a%b)等于a

根据这条规则,余数运算的结果只能在红利为负时为负,并且只能在红利为正时为正。此外,结果的大小总是小于除数的大小

事实上,
(-33/5)*5+(-33%5)
变成了
-6*5+(-3)
,等于
-33

要获得积极的结果,您必须获得积极的红利。

根据:

整数操作数的余数运算。。。生成一个结果值,使(a/b)*b+(a%b)等于a

在您的示例中,a=-33和b=5。因此:

    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));
        }
    });
根据报告:

整数操作数的余数运算。。。生成一个结果值,使(a/b)*b+(a%b)等于a

在您的示例中,a=-33和b=5。因此:

    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));
        }
    });

为什么它会在谷歌搜索中返回2?@turbo type-33%5。啊,我现在明白了,从来没有必要对负数进行模化number@turbo我将迭代一个数组,我必须保护它不受负数的影响。为什么它会在谷歌搜索中返回2?@turbo type-33%5。啊,我现在明白了,从来没有必要对负数进行模化number@turbo我将迭代一个数组,我必须保护它不受负数的影响。同样,为了获得
2
而不是
-3
OP可以在结果中添加5,如果新结果不是负值,则再次使用模5,如
(-33%5+5)%5
+1用于JLS。同样,为了得到
2
而不是
-3
OP可以在结果中添加5,如果新结果不是负值,则再次使用模5,如
(-33%5+5)%5