黑马程序员技术交流社区

标题: 大家看看下面的这道改错题,这是我找工作时的笔试题 [打印本页]

作者: 邵天强    时间: 2012-11-17 17:10
标题: 大家看看下面的这道改错题,这是我找工作时的笔试题
本帖最后由 邵天强 于 2012-11-17 22:27 编辑

package com.itheima.reflect;
public class Test{
public static void main(String[]args){
     for(int i=Integer.MIN_VALUE;i<Integer.MAX_VALUE;i++){
       boolean isOdd=isOdd(i);
      System.out.println(String.format("i=%d,isOdd=%b", i, isOdd));
     }
}
public static boolean isOdd(int num){
  return num%2==1;
}
}
大家看一下有什么问题
作者: 许坤    时间: 2012-11-17 17:32
boolean isOdd=isOdd(i); 这是布尔类型的,怎么能在format("i=%d,isOdd=%b", i, isOdd);中通过呢?
作者: 汤瑞贺    时间: 2012-11-17 17:51
运行正常...
作者: 邵天强    时间: 2012-11-17 17:56
汤瑞贺 发表于 2012-11-17 17:51
运行正常...

但是你看结果正确吗?
作者: 殷士剑    时间: 2012-11-17 17:58
当 num 为正数时, num%2 = 1 或者 num%2 = 0;
当 num 位负数时, num%2 = -1 或者 num%2 = 0;
所以,你少考虑了 num%2 = -1 的情况。
作者: 徐军涛    时间: 2012-11-17 18:08
是可以正常运行的 System.out.println(String.format("i=%d,isOdd=%b", i, isOdd));
String的有2个格式化输出,此题调用的是format(String format, Object... args)
思来想去,逻辑没问题;就可能是语法的问题,可是这里面就牵涉到了自动拆装箱和多态:格式里面接受的是Object 但是你传入的是i, isOdd
JDK1.5后的编译是不会出问题的
这时,我就有疑问了,你什么时间面试的?
作者: 邵天强    时间: 2012-11-17 18:23
这是今年巨人网络校招的一道改错题,我当时也是这样修改的return num%2!=0,那时我也想到另一个方法:return(num&1)==1,但是那时不敢确定对不对,没有往上写,我感觉还可以,不知道大家怎样想的
作者: 孟伟娟    时间: 2012-11-17 20:21
这个题判断是不是基数,需要分两种情况,当i<0时,返回i %2 == -1;当i >0时,返回i%2 ==1。
public static boolean isOdd(int num){
       if(i < 0)
         return num%2==-1;
       else
         return num%2== 1;
}





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