论坛首页 Java企业应用论坛

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

浏览 18347 次
该帖已经被评为隐藏帖
作者 正文
   发表时间: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);
}
0 请登录后投票
   发表时间:2010-12-27  
ouchxp 写道
贫僧不吃肉 写道

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

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

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

这个解释给力!
0 请登录后投票
   发表时间:2010-12-28  
运行一下,哈哈。关于结果小数点后有很多位,我们讨论过是因为二进制的计算问题。
0 请登录后投票
   发表时间: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   何处语义不明?
0 请登录后投票
   发表时间: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
假设我们从非专业的编成人员(例如:客户)来看,
①方案很容易让人明白是求奇数,②方案不容易让人理解。
0 请登录后投票
   发表时间: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
假设我们从非专业的编成人员(例如:客户)来看,
①方案很容易让人明白是求奇数,②方案不容易让人理解。

这个解法好
0 请登录后投票
   发表时间: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));
	}
}

0 请登录后投票
   发表时间:2010-12-29  
我不给力

0
-1
0
1
0
0.89999999...


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


搞笑了,呵呵
0 请登录后投票
   发表时间:2011-04-23  
苍山洱海 写道
false
false
false
true
false
0.8999999999999999

答案是这样的。
0 请登录后投票
   发表时间:2011-04-23  
yangyi 写道
    public static boolean isOdd(int i){
    return (i & 1) == 1;
    } 

牛叉!
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics