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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 邵天强 于 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;
}
}
大家看一下有什么问题

点评

System.out.println(String.format("i=%d,isOdd=%b", i, isOdd));format传入的参数是format(Locale l, String format, Object... args),里边的Locate传入的不对  发表于 2012-11-17 17:40

评分

参与人数 1技术分 +1 收起 理由
古银平 + 1 谢谢分享

查看全部评分

7 个回复

倒序浏览
boolean isOdd=isOdd(i); 这是布尔类型的,怎么能在format("i=%d,isOdd=%b", i, isOdd);中通过呢?

点评

不是的,是因为第一个参数不能传入String类型的要是Locate类型的  发表于 2012-11-17 17:42
回复 使用道具 举报
运行正常...
回复 使用道具 举报
汤瑞贺 发表于 2012-11-17 17:51
运行正常...

但是你看结果正确吗?
回复 使用道具 举报
当 num 为正数时, num%2 = 1 或者 num%2 = 0;
当 num 位负数时, num%2 = -1 或者 num%2 = 0;
所以,你少考虑了 num%2 = -1 的情况。

点评

很对忘记考虑负数的情况了,最简便的就是return num%2!=0;  发表于 2012-11-17 18:05

评分

参与人数 1技术分 +1 收起 理由
古银平 + 1 很给力!

查看全部评分

回复 使用道具 举报
是可以正常运行的 System.out.println(String.format("i=%d,isOdd=%b", i, isOdd));
String的有2个格式化输出,此题调用的是format(String format, Object... args)
思来想去,逻辑没问题;就可能是语法的问题,可是这里面就牵涉到了自动拆装箱和多态:格式里面接受的是Object 但是你传入的是i, isOdd
JDK1.5后的编译是不会出问题的
这时,我就有疑问了,你什么时间面试的?
回复 使用道具 举报
这是今年巨人网络校招的一道改错题,我当时也是这样修改的return num%2!=0,那时我也想到另一个方法:return(num&1)==1,但是那时不敢确定对不对,没有往上写,我感觉还可以,不知道大家怎样想的
回复 使用道具 举报
这个题判断是不是基数,需要分两种情况,当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;
}
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马