A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 刘云龙 中级黑马   /  2012-10-18 00:01  /  1446 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

  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。
为什么?

评分

参与人数 1技术分 +1 收起 理由
唐志兵 + 1 赞一个!

查看全部评分

7 个回复

倒序浏览

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

所以都为FALSE
回复 使用道具 举报
因为-3%2=-1.
你可以这样稍作修改
static boolean isOdd(int n)
        {
                //return n%2 == 1||n%2 ==-1;
                return Math.abs(n)%2==1;//也可以用绝对值参与运算
        }
回复 使用道具 举报
余数结果是正数还是负数,取决于%左边的n。
当n为正数,n%2结果为正数,否则为负数。
你这道题,-3%2应该为-1,不等于1,所以返回值false
回复 使用道具 举报
取模运算中,结果取决于分子是负数还是正数,如果是-3%2结果是-1,如果是3%2结果是1,所以-1不等于1结果是false
回复 使用道具 举报
有时候,只要在适当的位置加个输出语句,就能知道问题的所在了
回复 使用道具 举报
-3%2=-1   
-1!=1
return false
回复 使用道具 举报
谢谢各位,明白了
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马