黑马程序员技术交流社区

标题: 取余运算符的问题 [打印本页]

作者: 刘云龙    时间: 2012-10-18 00:01
标题: 取余运算符的问题
  1. public static void main(String[] args)
  2. {
  3. System.out.println(isOdd(-3));
  4. }

  5. static boolean isOdd(int n)
  6. {
  7. return n%2 == 1;
  8. }
复制代码
isOdd()方法用来求一个整数是否为奇数
当是当输入负数时,返回值却为false。
为什么?
作者: 葬天    时间: 2012-10-18 00:12

在取余操作中,余数的正负符号完全取决于左操作数。

所以都为FALSE
作者: 徐梦侠    时间: 2012-10-18 00:14
因为-3%2=-1.
你可以这样稍作修改
static boolean isOdd(int n)
        {
                //return n%2 == 1||n%2 ==-1;
                return Math.abs(n)%2==1;//也可以用绝对值参与运算
        }
作者: 丁旭    时间: 2012-10-18 00:16
余数结果是正数还是负数,取决于%左边的n。
当n为正数,n%2结果为正数,否则为负数。
你这道题,-3%2应该为-1,不等于1,所以返回值false
作者: 占琳    时间: 2012-10-18 01:14
取模运算中,结果取决于分子是负数还是正数,如果是-3%2结果是-1,如果是3%2结果是1,所以-1不等于1结果是false
作者: 刘伟平    时间: 2012-10-18 08:07
有时候,只要在适当的位置加个输出语句,就能知道问题的所在了
作者: 高志鹏    时间: 2012-10-18 09:33
-3%2=-1   
-1!=1
return false

作者: 刘云龙    时间: 2012-10-18 10:28
谢谢各位,明白了




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2