`
贫僧不吃肉
  • 浏览: 62350 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

一道简单笔试题,你给力吗?

阅读更多

一道简单笔试题,你给力吗?

 

先申明:大虾们就别看了哈,你们懂的~

 

没看过的同学就当学习,

看过了的同学就当温习。

 

 

祝大家天天进步~

 

public class Problems {
	
	//判断是否为奇数,是就返回true
	public static boolean isOdd(int i){
		return i % 2==1;    
	}
	
	public static void main(String[] args){
		for(int i=-2;i<=2;i++){
		System.out.println(isOdd(i));
		}
		System.out.println(2.00-1.10);
	}
	//请问,这段程序将会输出什么?
           //请解释并优化该代码
}

 

分享到:
评论
39 楼 361010911 2011-04-23  
yangyi 写道
    public static boolean isOdd(int i){
    return (i & 1) == 1;
    } 

牛叉!
38 楼 361010911 2011-04-23  
苍山洱海 写道
false
false
false
true
false
0.8999999999999999

答案是这样的。
37 楼 cranklau 2010-12-29  
我不给力

0
-1
0
1
0
0.89999999...


程序执行一下才发现
false
false
false
true
false
0.8999999999999999


搞笑了,呵呵
36 楼 imtinx 2010-12-28  

import java.math.*;
public class Problems {
	
	//判断是否为奇数,是就返回true
	public static boolean isOdd(int i){
		return (i&1)== 1;    
	}
	
	public static void main(String[] args){
		for(int i=-2;i<=2;i++){
		System.out.println(isOdd(i));
		}
		//字符串构造的BigDecimal进行精确运算
		BigDecimal a = new BigDecimal("2.00");
		BigDecimal b = new BigDecimal("1.10");
		System.out.println(a.subtract(b));
	}
}

35 楼 laobian 2010-12-28  
xieyan 写道
dsjt 写道
xieyan 写道
for (int i = -2; i <= 2; i++) {
System.out.println((i % 2 != 0));
}

System.out.println(2.00f - 1.10f);

就可以得到想要的结果。


下面的代码确实可以实现,但是语义不明确,会给以后的维护增加难度(别人要去理解你想表达的意思)。
for (int i = -2; i <= 2; i++) {
System.out.println((i & 1) == 1);
}


(i & 1) == 1   何处语义不明?



①i % 2 != 0
②(i & 1) == 1
假设我们从非专业的编成人员(例如:客户)来看,
①方案很容易让人明白是求奇数,②方案不容易让人理解。

这个解法好
34 楼 xieyan 2010-12-28  
dsjt 写道
xieyan 写道
for (int i = -2; i <= 2; i++) {
System.out.println((i % 2 != 0));
}

System.out.println(2.00f - 1.10f);

就可以得到想要的结果。


下面的代码确实可以实现,但是语义不明确,会给以后的维护增加难度(别人要去理解你想表达的意思)。
for (int i = -2; i <= 2; i++) {
System.out.println((i & 1) == 1);
}


(i & 1) == 1   何处语义不明?



①i % 2 != 0
②(i & 1) == 1
假设我们从非专业的编成人员(例如:客户)来看,
①方案很容易让人明白是求奇数,②方案不容易让人理解。
33 楼 dsjt 2010-12-28  
xieyan 写道
for (int i = -2; i <= 2; i++) {
System.out.println((i % 2 != 0));
}

System.out.println(2.00f - 1.10f);

就可以得到想要的结果。


下面的代码确实可以实现,但是语义不明确,会给以后的维护增加难度(别人要去理解你想表达的意思)。
for (int i = -2; i <= 2; i++) {
System.out.println((i & 1) == 1);
}


(i & 1) == 1   何处语义不明?
32 楼 hong_kun 2010-12-28  
运行一下,哈哈。关于结果小数点后有很多位,我们讨论过是因为二进制的计算问题。
31 楼 Javakeith 2010-12-27  
ouchxp 写道
贫僧不吃肉 写道

  2.00-1.10那个。。
  貌似是java对浮点数的表示的方面有问题。。

经典的精度丢失问题.不只是Java的问题.
精确计算,要使用BigDecimal

精度丢失问题这里有详细论述
http://hxraid.iteye.com/blog/504293

这个解释给力!
30 楼 xieyan 2010-12-27  
for (int i = -2; i <= 2; i++) {
System.out.println((i % 2 != 0));
}

System.out.println(2.00f - 1.10f);

就可以得到想要的结果。


下面的代码确实可以实现,但是语义不明确,会给以后的维护增加难度(别人要去理解你想表达的意思)。
for (int i = -2; i <= 2; i++) {
System.out.println((i & 1) == 1);
}
29 楼 lxs647 2010-12-27  
有点儿意思、、、、、、
28 楼 java_xiaoqiang 2010-12-27  
苍山洱海 写道
false
false
false
true
false
0.8999999999999999

一看就知道是运行出来的结果!你人脑有那么精确吗?
不过楼主这注释好像偏离了重点!
27 楼 haojia716 2010-12-27  
Java解惑上有的
26 楼 izat 2010-12-27  
// f f f t f
// 0.8999999...

汗,其实我并不知道第一个的问题,只是觉得肯定有陷阱,但是1%2==1 肯定是true。
25 楼 sunofsummer 2010-12-27  
Java Puzzle里这些问题都说过 float double那个是精度丢失问题 使用BigDecimal就好了。
24 楼 贫僧不吃肉 2010-12-26  
programlv 写道
第一个没注意过负数
第二个:System.out.println(2.00f-1.10f);



最简单的做法,不错~
23 楼 programlv 2010-12-26  
第一个没注意过负数
第二个:System.out.println(2.00f-1.10f);
22 楼 贫僧不吃肉 2010-12-26  
沈冠军 写道
第一个会,第二个就不太清楚了



精度丢失,很隐蔽的问题。。
21 楼 heisedeyueya 2010-12-26  
贫僧不吃肉 写道
heisedeyueya 写道
自然数才有奇数与偶数的说法,而负数不是自然数。这个题目只能得出余数是0还是1,所以题目本身就有一点儿问题。


你提出的问题还有点意思,我也有点confuse了,所以去查了一下

百度百科的定义:
奇数(英文:odd)数学术语 , 整数中,能被2整除的数是偶数,不能被2整除的数是奇数,偶数可用2k表示,奇数可用2k+1表示,这里k是整数。 奇数包括正奇数、负奇数


维基百科的定义:
所有整数不是奇数[1](又称单数),就是偶数[2](又称双数)。若某数是2的倍数,它就是偶数;若非,它就是奇数,可表示为2n+1(n为整数),即奇数除以二的余数是一。


所以,负数也可以是奇数~~题目是没问题的~~

哦。。。学习了
20 楼 twojinyong 2010-12-26  
java解惑谜题1和2

相关推荐

Global site tag (gtag.js) - Google Analytics