为什么我从这个陈述中得到-1?

时间:2011-02-08 04:30:11

标签: java modulo

    if(heading == 2){
        nextY = (y-1) % 20;
        nextX = x;
    }

调试这个程序时,我的标题是2,y = 0,但是,当我来到这个if语句时,nextY变为-1。为什么不能正常骑行? (0-19)?

2 个答案:

答案 0 :(得分:3)

这就是mod操作通常适用于编程中的负数(在我试过的所有语言中) 但是在做mod之前你可以轻松地使数字为正数

nextY = (y + 20 - 1) % 20;

答案 1 :(得分:1)

模数运算符通常会为负输入返回负数。例如,C#将为-356..359表达式x % 360提供一个数字。

不是减去1然后取模20,你可以加19,这是相同的但保持数字为正,或者你可以使用三元运算符:

nextY = (y+19) % 20; // or
nextY = (nextY == 0) ? 19 : nextY - 1;