Java 模算子不';我不能给出正确的结果

Java 模算子不';我不能给出正确的结果,java,Java,为什么java中的模运算符与wolfram alpha不同 我的公式是: var = (var-x) % 10 wolfram给了我一个正确的结果,例如 (0 - 1) % 10 = 9 Java给出了-1 我如何才能以最好的方式解决这个问题?如果需要,我会为这种情况编写自己的mod,比如 public int nonNegativeModOfDiff(int a, int b,int n) { int mod = (a-b)%n; return mod >= 0 ? mod

为什么java中的模运算符与wolfram alpha不同

我的公式是:

var = (var-x) % 10
wolfram给了我一个正确的结果,例如

(0 - 1) % 10 = 9
Java给出了-1


我如何才能以最好的方式解决这个问题?

如果需要,我会为这种情况编写自己的mod,比如

public int nonNegativeModOfDiff(int a, int b,int n) {
  int mod = (a-b)%n;
  return mod >= 0 ? mod : mod + n;
}

如果需要,我会为这种情况编写自己的mod,比如

public int nonNegativeModOfDiff(int a, int b,int n) {
  int mod = (a-b)%n;
  return mod >= 0 ? mod : mod + n;
}

这应该可以做到:

class ModTest {
    public static void main (String[] args) {
        int x = -1;
        int m = 10;
        int y = mod(x, m);

        System.out.println(y);
    }

    static int mod(int x, int m) {
        return (x % m + m) % m;
    }
}

这应该可以做到:

class ModTest {
    public static void main (String[] args) {
        int x = -1;
        int m = 10;
        int y = mod(x, m);

        System.out.println(y);
    }

    static int mod(int x, int m) {
        return (x % m + m) % m;
    }
}

这就是
%
是如何定义的,并且在大多数编程语言中应该是有效的,即使相反的情况有时是有用的

我建议实施您自己的模方法:

int positiveModulo(a, b) {
    int result = a % b;
    if (result < 0) { result += b; }
    return result;
}
int-positiveModulo(a,b){
int result=a%b;
如果(结果<0){result+=b;}
返回结果;
}

这就是
%
的定义,在大多数编程语言中都应该是这样的,即使相反的情况有时会有用

我建议实施您自己的模方法:

int positiveModulo(a, b) {
    int result = a % b;
    if (result < 0) { result += b; }
    return result;
}
int-positiveModulo(a,b){
int result=a%b;
如果(结果<0){result+=b;}
返回结果;
}

来自:“根据此规则,余数运算的结果只有在被除数为负时才能为负,只有在被除数为正时才能为正。此外,结果的大小始终小于除数的大小。”

来自:“根据这条规则,余数运算的结果只有在股息为负时才能为负,只有在股息为正时才能为正。此外,结果的大小总是小于除数的大小。“

这将产生1,而不是9。这将产生1,而不是9。-1模10=-1和-1模10=9都是correct@Dave模块化算法有时被称为时钟算法,因为它是循环的。所以在mod 10中,9=-1。请注意,
%
是余数运算符,而不是模运算符。想到这一点,它的行为应该是有意义的…@dataNinja124如果它是一个戒指,是的(我想Wolfram就是这样运作的)。对于所有整数,我对运算符的理解是不同的,-1 mod 10=-1和-1 mod 10=9都是correct@Dave模块化算法有时被称为时钟算法,因为它是循环的。所以在mod 10中,9=-1。请注意,
%
是余数运算符,而不是模运算符。想到这一点,它的行为应该是有意义的…@dataNinja124如果它是一个戒指,是的(我想Wolfram就是这样运作的)。对于所有整数,我对运算符的理解是不同的。谢谢。解决了问题,谢谢。解决了这个问题。