找奇数

danliandejintou 2010-05-25 01:22:28
刚看到的文章。java陷阱那篇

Java codepublic static boolean isOdd(int i){ 
return i % 2 == 0;
}
上面的方法真的能找到所有的奇数么?
---------------------------------------------------
不能吗?
...全文
194 22 打赏 收藏 转发到动态 举报
写回复
用AI写文章
22 条回复
切换为时间正序
请发表友善的回复…
发表回复
wj63558595 2010-05-26
  • 打赏
  • 举报
回复
没记错的话是java解惑中的一个题目。。。
正确的原文是:

public static boolean isOdd(int i){
return i % 2 == 1;
}

奇数可以被定义为被2整除余数为1的整数。表达式 i % 2 计算的是 i 整除 2 时所产生的余数,因此看起来这个程序应该能够正确运转。遗憾的是,它不能;它在四分之一的时间里返回的都是错误的答案。
为什么是四分之一?因为在所有的 int 数值中,有一半都是负数,而 isOdd 方法对于对所有负奇数的判断都会失败。在任何负整数上调用该方法都回返回 false ,不管该整数是偶数还是奇数。

正确的应该是:

public static boolean isOdd(int i){
return i % 2 != 0;
}
danliandejintou 2010-05-26
  • 打赏
  • 举报
回复
[Quote=引用 18 楼 ol_beta 的回复:]
引用 5 楼 lacus87 的回复:
我汗。。。楼上回答的各位先看看代码吧。。。
方法名是查找奇数,
实现的明显是找偶数

貌似是我发的帖子里面的第一题,应该这么写

Java code
Java codepublic static boolean isOdd(int i){
return i % 2 == 1;
}
[/Quote]
刚才我又去看了。你的题目里是写的return i%2==0;
答案里才是return i%==1
我就是想知道,为什么i%2==0不可以?
我试了。-10到10。
奇数返回了false。偶数返回了true。
没有问题啊。为什么说这种不能呢?
danliandejintou 2010-05-26
  • 打赏
  • 举报
回复
[Quote=引用 18 楼 ol_beta 的回复:]
引用 5 楼 lacus87 的回复:
我汗。。。楼上回答的各位先看看代码吧。。。
方法名是查找奇数,
实现的明显是找偶数

貌似是我发的帖子里面的第一题,应该这么写

Java code
Java codepublic static boolean isOdd(int i){
return i % 2 == 1;
}
[/Quote]呵呵。一时敲错了。
lzw0286 2010-05-25
  • 打赏
  • 举报
回复
不能。
应该是!=
i李小武 2010-05-25
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 lacus87 的回复:]
我汗。。。楼上回答的各位先看看代码吧。。。
方法名是查找奇数,
实现的明显是找偶数
[/Quote]
貌似是我发的帖子里面的第一题,应该这么写
Java codepublic static boolean isOdd(int i){ 
return i % 2 == 1;
}

lacus87 2010-05-25
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 bao110908 的回复:]
return (i & 1) == 1;
return (i & 1) != 0;
[/Quote]
惊现火龙果...很黄很暴力的口牙....
hollowinheart 2010-05-25
  • 打赏
  • 举报
回复
10楼正解
zuoguodang 2010-05-25
  • 打赏
  • 举报
回复
负数怎么算
pjw100 2010-05-25
  • 打赏
  • 举报
回复
你是找偶数还是在找奇数?
  • 打赏
  • 举报
回复
return (i & 1) == 1;
return (i & 1) != 0;
danliandejintou 2010-05-25
  • 打赏
  • 举报
回复
呵呵,谢谢各位了。
return i%2==0
是我手误吧。敲错了。不是复制的。
不过这跟我的疑问没什么关系,反正确实是用来判断奇偶而已。
谢谢各位了
princess_rosie 2010-05-25
  • 打赏
  • 举报
回复
static boolean isOdd(int i){
return !(i % 2 == 0);
}

这个才是找奇数的,只要是奇数都会输出true
shine333 2010-05-25
  • 打赏
  • 举报
回复
那篇文章的意思是
public static boolean isOdd(int i){
return i % 2 == 1;
}
是错误的,因为负数%2=0或-1,所以要根据和0比来判断奇偶
jywbd 2010-05-25
  • 打赏
  • 举报
回复
路过,我不说话
龙四 2010-05-25
  • 打赏
  • 举报
回复
楼主蛋疼
keeya0416 2010-05-25
  • 打赏
  • 举报
回复
代码原意不是找奇数,而是判断一个参数是否是奇数
但代码实现的明显是判断参数是不是偶数
什么鬼哈哈 2010-05-25
  • 打赏
  • 举报
回复
Java codepublic static boolean isOdd(int i){ 
return i % 2 == 1;
}
lacus87 2010-05-25
  • 打赏
  • 举报
回复
我汗。。。楼上回答的各位先看看代码吧。。。
方法名是查找奇数,
实现的明显是找偶数
zhongguang1019 2010-05-25
  • 打赏
  • 举报
回复
不能把,int 类型的,有个范围的限制吧。
kala888 2010-05-25
  • 打赏
  • 举报
回复
不能,int 是有大小限制的
Integer.MAX_VALUE
加载更多回复(2)

62,615

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧