博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
笔试题
阅读量:6224 次
发布时间:2019-06-21

本文共 5966 字,大约阅读时间需要 19 分钟。

 巨人网络2013校园招聘Java程序员笔试题:

1、改错题(指出错误之处并对其进行修改)

  1.1、下列代码的错误之处

  --

  --

1 public class Question1 { 2     /** 3      * 判断是否为奇数 4      * @param i 5      * @return true 为奇数 false 为偶数 6      */ 7     public static boolean isOdd(int i){ 8         return i%2==1; 9     }10     /**11      * @param args12      */13     public static void main(String[] args) {14         for(int i=Integer.MIN_VALUE;i<=Integer.MAX_VALUE;++i){15             boolean isOdd=isOdd(i);16             System.out.println(String.format("i=%d,isOdd=%b", i, isOdd));17         }18     }19 } 

  1.2、下列代码的错误之处

  --

  --

1 public class Question2 {2     public static void main(String[] args) {3         final long MICROS_PER_DAY=24*60*60*1000*1000;4         final long MILLIS_PER_DAY=24*60*60*1000;5         System.out.println(MICROS_PER_DAY/MILLIS_PER_DAY);6     }7 }

  1.3、下列代码的错误之处

  --

  --

1 public class Question3 {2     public static void main(String[] args) {3         for(byte b=Byte.MIN_VALUE;b

 


  1.1错误:

    1、for语句是死循环; 

    2、判断int型是否为奇数return i%2==1错误,应该为:return i%2!=0;

    3、Mysuny这位朋友提出判断是否为奇数用 i&1最好,我表示赞成,return (i&1)==1;

 

 

  测试代码1:

1 public class Question1Test2 { 2     /** 3      * 判断是否为奇数 4      * @param i 5      * @return true 为奇数 false 为偶数 6      */ 7     public static boolean isOdd(int i){ 8         return i%2==1; 9     }10     /**11      * @param args12      */13     public static void main(String[] args) throws Exception {14         for(int i=Integer.MAX_VALUE-5;i<=Integer.MAX_VALUE;++i){15             boolean isOdd=isOdd(i);16             System.out.println(String.format("i=%d,isOdd=%b", i, isOdd));17             Thread.sleep(500);18         }19     }20 }

  结果:

1 i=2147483642,isOdd=false2 i=2147483643,isOdd=true3 i=2147483644,isOdd=false4 i=2147483645,isOdd=true5 i=2147483646,isOdd=false6 i=2147483647,isOdd=true7 i=-2147483648,isOdd=false8 i=-2147483647,isOdd=false9 i=-2147483646,isOdd=false   注意:这将引出此程序的第二个错误!
1 public class Question1Test3 { 2     public static void main(String[] args) { 3         System.out.println("整数的最小值:"+Integer.MIN_VALUE); 4         //    整数的最小值:-2147483648  5         System.out.println("整数的最大值:"+Integer.MAX_VALUE); 6         //    整数的最大值:2147483647  7         System.out.println("Integer.MAX_VALUE+1:"+(Integer.MAX_VALUE+1)); 8         //    Integer.MAX_VALUE+1:-2147483648 9     }10 }

  测试代码二:

1 public class Question1Test5 { 2     /** 3      * 判断是否为奇数 4      * @param i 5      * @return true 为奇数 false 为偶数 6      */ 7     public static boolean isOdd(int i){ 8         int j=i%2; 9         System.out.println("i%2="+j);10         return j==1;11     }12     /**13      * @param args14      */15     public static void main(String[] args) {16         for(int i=-10;i<=0;++i){17             boolean isOdd=isOdd(i);18             System.out.println(String.format("i=%d,isOdd=%b", i, isOdd));19         }20     }21 }

  运行结果:

1 i%2=0 2 i=-10,isOdd=false 3 i%2=-1 4 i=-9,isOdd=false 5 i%2=0 6 i=-8,isOdd=false 7 i%2=-1 8 i=-7,isOdd=false 9 i%2=010 i=-6,isOdd=false11 i%2=-112 i=-5,isOdd=false13 i%2=014 i=-4,isOdd=false15 i%2=-116 i=-3,isOdd=false17 i%2=018 i=-2,isOdd=false19 i%2=-120 i=-1,isOdd=false21 i%2=022 i=0,isOdd=false

  通过测试二及其运行结果我们可以看到当为int型的数据时,与2的余数为   -1而不是1。

  正确写法:

1 public class Question1Test4 { 2     /** 3      * 判断是否为奇数 4      * @param i 5      * @return true 为奇数 false 为偶数 6      */ 7     public static boolean isOdd(int i){ 8         return i%2 != 0; 9     }10     /**11      * @param args12      */13     public static void main(String[] args) {14         for(int i=Integer.MIN_VALUE;i<=Integer.MAX_VALUE;++i){15             boolean isOdd=isOdd(i);16             System.out.println(String.format("i=%d,isOdd=%b", i, isOdd));17             if(i == Integer.MAX_VALUE)18                 break;19         }20     }21 }

 

 

public class odd {

/**
* 判断是否为奇数
* @return true 为奇数 false 为偶数
*/
public static boolean isOdd(int i){
return i%2 != 0;
}

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));

if(i == Integer.MAX_VALUE) break;

}
}

 

}

 

 

 

  1.2错误:int类型数值计算超出范围的问题

  1.2的运行结果是:5,大家是不是感觉很奇怪啊,为什么不是1000呢?

  测试程序1如下:

1 public class Question2Test { 2     public static void main(String[] args) { 3         int i = 24 * 60 * 60 * 1000 * 1000; 4         long li = 24 * 60 * 60 * 1000 * 1000; 5         long l = 24 * 60 * 60 * 1000 * 1000L; 6         System.out.println("i=" + i); 7         //    i=500654080 8         System.out.println("li=" + li); 9         //    li=50065408010         System.out.println("l=" + l);11         //    l=8640000000012         System.out.println(Integer.MAX_VALUE);13         //    214748364714     }15 }

  从测试结果我们可以看出:24*60*60*1000*1000 的结果明显超出了int类型的表达范围,在运算的过程中运算结果仍然为int型,超出范围就截取后64位作为运算的结果。因此,我们看到虽然定义了long型变量li,但结果仍然是截取后的结果。

  测试程序1中仍然存在问题,我们在测试程序2中指出。

  测试程序2如下:

1 public class Question2Test2 { 2     public static void main(String[] args) { 3         long l1 = 24*60*60*1000*1000*1000L; 4         long l2 = 24L*60*60*1000*1000*1000; 5         System.out.println(l1); 6         //    500654080000 7         System.out.println(l2); 8         //    86400000000000 9     }10 }

  我想大家都可以看懂我写测试程序2的用意,我就不在多说了。。。

  正确写法如下:

1 public class Question2Test3 {2     public static void main(String[] args) {3         final long MICROS_PER_DAY=24L*60*60*1000*1000;4         final long MILLIS_PER_DAY=24L*60*60*1000;5         System.out.println(MICROS_PER_DAY/MILLIS_PER_DAY);6         //    10007     }8 }

  1.3正确     (本人这么觉得)

  测试程序1:

1 public class Question3Test1 { 2     public static void main(String[] args) { 3         System.out.println("byte类型的最大值:"+Byte.MAX_VALUE); 4         //    byte类型的最大值:127 5         for(byte b=(byte)(Byte.MAX_VALUE-5);b

  运行结果:

1 b=1222 b=1233 b=1244 b=1255 b=126

  由于1.3程序的for循环中 b<Byte.MAX_VALUE  而并不是 b<=Byte.MAX_VALUE ,所以没有出现1.1中的错误。

  有人觉得0x90超出了byte类型的表示范围[-128,127],但是我并不觉得在这里是错误,因为题目也没有特殊要求。

 

转载于:https://www.cnblogs.com/java2016/p/5371746.html

你可能感兴趣的文章
22.2. 用户认证
查看>>
1.7. User interfaces
查看>>
阿里Druid数据连接池在SSM框架中的配置使用
查看>>
基于Metronic的Bootstrap开发框架经验总结(17)-- 使用 summernote插件实现HTML文档的编辑和图片插入操作...
查看>>
Linux虚拟主机通过程序实现二级域名绑定到子目录
查看>>
7.12. cvs diff
查看>>
Android酷炫实用的开源框架(UI框架)
查看>>
Winform开发框架之对话框样式同化
查看>>
一脸懵逼学习Linux的Shell编程
查看>>
Jmeter调试工具---Debug Sampler
查看>>
[裴礼文数学分析中的典型问题与方法习题参考解答]4.5.14
查看>>
impdp的TABLE_EXISTS_ACTION参数选项
查看>>
机器学习之深入理解神经网络理论基础、BP算法及其Python实现
查看>>
ecshop设置一个子类对应多个父类并指定跳转url的修改方法
查看>>
【spring源码学习】spring的事务管理的源码解析
查看>>
遇见喜欢数学的女孩
查看>>
linux进程资源占用高原因分析命令记录
查看>>
【转】solr+ajax智能拼音详解---solr跨域请求
查看>>
SOA架构设计经验分享—架构、职责、数据一致性
查看>>
微信开发之推广支持
查看>>