有趣的Java题目!!!

daijope 2011-08-06 10:19:02
这是以前别人发的帖子,我整理了一下,都是一些很有趣的题目。

from:火龙果


前言

大家先不要上机,先看看能不能得到正确的结果,请大家最好写上你所做的题目的相关知识点,这样大家都可以学习。
有兴趣的朋友可以篇号.题号,然后给出自己的想法。当然我想肯定有人做过这些题目了。


希望大家可以给出相关的想法,相关的考点,我已经整理了一份答案,到时候再贴出来。

第一篇

1.如果问大家“&”、“|”、“^”这三个是什么运算符?基会本上都会回答“位运算符”,但这样的回答只能得50分。大多数的Java程序员很可能不知道它还能充当其他的运算符——布尔逻辑运算符(前提是两边的数据类型为布尔类型)。

在布尔逻辑运算符中这三个运算符充当着“布尔逻辑与”、“布尔逻辑或”和“布尔逻辑异或”的角色。前面两个把它们再复制一个放在一起就成了逻辑运算符。布尔逻辑与(&)和布尔逻辑或(|)运算符的工作方式同逻辑与(&&)和逻辑或(||)的工作方式相同,布尔逻辑运算符的优先级别要高于逻辑运算符,除此之外它们还有一点细微的差别,看一看下面的程序将会输出什么,就会明白了。

最后一个布尔逻辑异或(^)用得就更少了,可以采用关系运算符不等于(!=)来代替,在此就不深究了。

布尔逻辑运算符与逻辑运算符还有个区别,就是布尔逻辑运算符可以与赋值运算符(=)结合成布尔逻辑赋值运算符(&=、|=、^=),而逻辑运算符就没有这样的功能,可能它本身就有两个了吧,再结合“=”的话就变三个了,呵呵,太多了 :)

Java code


public class Test1 {
public static void main(String[] args) {
int m = 5, n = 5;
if ((m != 5) && (n++ == 5)) {
}
System.out.println("a." + n);
m = n = 5;
if ((m != 5) & (n++ == 6)) {
}
System.out.println("b." + n);
m = n = 5;
if ((m == 5) || (n++ == 5)) {
}
System.out.println("c." + n);
m = n = 5;
if ((m == 5) | (n++ == 6)) {
}
System.out.println("d." + n);
}
}


Output:


=====★==我==是==题==目==间==的==小==分==隔==符==★=====

2. 自动装箱的疑惑

JDK1.5中增加了自动拆装箱的语言特性,在基本类型和包装类型之间可以相互地转换和运算。大家也都知道Java中==运算符是比较两个对象间的引用是否相同。在自动拆装箱与“==”运算符之间也会产生一些奇怪的事情,看看下面的程序将会输出什么?

Java code

public class Test2 {
public static void main(String[] args) {
int k = 100;
Integer int1 = k;
Integer int2 = k;
System.out.println("a." + (int1 == int2));
k = 200;
Integer int3 = k;
Integer int4 = k;
System.out.println("b." + (int3 == int4));
char c = 'A';
Character char1 = c;
Character char2 = c;
System.out.println("c." + (char1 == char2));
c = '国';
Character char3 = c;
Character char4 = c;
System.out.println("d." + (char3 == char4));
}
}

Output:

=====★==我==是==题==目==间==的==小==分==隔==符==★=====

3. 奇怪的\u与0x

\u是Unicode字符的前缀,而0x是十六进制数值的前缀,能通用吗?下面的程序是否能如愿以偿地将Hello与World!分成两行输出呢?

Java code

public class Test3 {
public static void main(String[] args) {
/* 提示 \u000A 表示换行(LF),而 0x000A 表示什么呢? */
char c = 0x000A; System.out.println("Hello" + c + "World!");
}
}

Output:

=====★==我==是==题==目==间==的==小==分==隔==符==★=====

4.不可能发生的事

来个简单点的填空题哈,在空格处填上适当的数,让下面的程序能输出“Hello World!”。

Java code:

public class Test4 {
public static void main(String[] args) {
int num = _____________;
if (num < 0 && num == Math.abs(num)) {
System.out.println("Hello World!");
}
}
}


填入:


=====★==我==是==题==目==间==的==小==分==隔==符==★=====

5,模棱两可的方法重载

invoke有两个重载的方法,一个是Object作为参数,另一个是int[]作为参数,看看下面的程序会输出什么?

Java code:

public class Test5 {
public static void main(String[] args) {
invoke(null);
}

private static void invoke(Object obj) {
System.out.println("Object");
}

private static void invoke(int[] nums) {
System.out.println("Arrays");
}
}

Output:


=====★==我==是==题==目==间==的==小==分==隔==符==★=====

6,Number引起的计算错误

Number是众多数值类型的抽象父类,难道用它会引发计算错误?!看看下面的程序会输出什么?

Java code:

public class Test6 {
public static void main(String[] args) {
Number num = 12345 + 5432l;
System.out.println(num.intValue());
}
}


Output:




第二篇

下面的几个程序会输出什么?先不要上机哦!!!
1.输出:
Java code:

public class Test3 {
public static void main(String[] args) {
Parrent p = new Parrent();
Parrent c = new Child();

System.out.println(p.getName());
System.out.println(c.getName());
}
}
class Parrent {
public static String getName() {
return "Parrent";
}
}
class Child extends Parrent {
public static String getName() {
return "child";
}
}


Output:


=====★==我==是==题==目==间==的==小==分==隔==符==★=====

2.输出:
Java code:

public class Test {
public static void main(String[] args) {
for(int i = 0; i <= 10; i++)
Integer k = new Integer(i);
System.out.println( "Java Puzzlers ");
    }
  }



Output:


=====★==我==是==题==目==间==的==小==分==隔==符==★=====

3
请补全 i 的声明(要求:i 不允许为 float、double、Float 和 Double 类型)让其能输出“Hello World”。
Java code:

public class Test {
public static void main(String[] args) {
fill here ;
if (i != i +0) {
System.out.println("hello world");
}
}
}


填入:

=====★==我==是==题==目==间==的==小==分==隔==符==★=====

4.请问以下程序的输出结果是什么?

Java code:

import java.math.BigInteger;

public class Test {
public static void main(String[] args) {
BigInteger one = new BigInteger( "1 ");
BigInteger two = new BigInteger( "2 ");
BigInteger three = new BigInteger( "3 ");
BigInteger sum = new BigInteger( "0 ");
sum.add(one);
sum.add(two);
sum.add(three);
System.out.println(sum.toString());
  }
}


输出:

=====★==我==是==题==目==间==的==小==分==隔==符==★=====

5. 请将下面程序中的空格补全(要求见程序中)

  // 忽略 import 语句
Java code:  

public class Test {
public static void main(String[] args) {
List <String> list = new ArrayList <String> ();
list.add( "d ");
list.add( "c ");
list.add( "c ");
list.add( "a ");
list.add( "a ");
list.add( "b ");
list.add( "b ");
list = removeDuplicate(list);
// 输出的结果应是“d c a b ”
for(String str : list) {
System.out.print(str + " ");
  }
}    
    /**
     * 方法功能:移除 List 中重复的元素,并保持原有的顺序
     */
  public static <T> List <T> removeDuplicate(List <T> list) {
   // 把空格处完善
Return new ArrayList<T> (new LinkedHashSet<T>(list))___________________;
   }
}


填入:




第三篇
1. 请问以下程序会输出什么?
Java code:

public class Part {
public static void main(String[] args) {
int num = 32;
System.out.println(num >>= 32);
}
}


Output:

=====★==我==是==题==目==间==的==小==分==隔==符==★=====

2. 程序会输出什么呢?
Java code:

public class Part {
public static void main(String[] args) {
int j = 0;
for (int i = 0; i < 100; i++) {
j = j++;
}
System.out.println(j);
}
}


Output:

=====★==我==是==题==目==间==的==小==分==隔==符==★=====

3. 程序输出什么?
Java code:

public class Part {
public static void main(String[] args) {
boolean b = true?false:true == true?false:true;
System.out.println(b);
}
}


Output:


=====★==我==是==题==目==间==的==小==分==隔==符==★=====

4.继续输出什么?
Java code:

public class Part {
public static void main(String[] args) {
List<String> list = new ArrayList<String> ();
list.add("Happy");
list.add("Birthday");
list.add("to");
list.add("you");

for (Iterator i = list.iterator(); i.hasNext()) {
String s = i.next();
System.out.println(s);
}
}
}


Output:

=====★==我==是==题==目==间==的==小==分==隔==符==★=====

5.输出神马?
Java code:

public class Part {
public static void main(String[] args) {
Queue<Integer> q = new PriorityQueue<Integer>(20, new Comparator<Integer>() {
public int compare(Integer i1, Integer i2) {
int result = i1 % 2 - i2 % 2;
if (result == 0) {
return i1 - i2;
}
else
return result;
}

});
for (int i = 0; i < 20; i++) {
q.add(i);
}
for (int i = 0; i < 20; i++) {
System.out.println(q.poll());
}
}
}


Output:

=====★==我==是==题==目==间==的==小==分==隔==符==★=====

6. 请在以下程序段中的空白处补上最简洁的语句,在程序运行后会输出运行时的时间。

  显示格式为:yyyy-MM-dd HH:mm:ss
Java code:

  public class Part {
public static void main(String[] args) {
System.out.println(formatTime(System.currentTimeMillis()));

}

private static char[] formatTime(long currentTimeMillis) {
return 这儿填什么;
}
}



有兴趣的朋友可以篇号.题号,然后给出自己的想法。当然我想肯定有人做过这些题目了。

...全文
6251 3 收藏 144
写回复
144 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
clementxr 2011-09-02
我是来学习的
回复
AndsionLee 2011-09-02
mark! 3Q
回复
shanechan517 2011-09-02
果断 mark
回复
jiazimo 2011-09-02
标注,再做
回复
坚定了坚定 2011-09-01
[Quote=引用 19 楼 daijope 的回复:]
引用 18 楼 jq_ii_qc 的回复:

Java code
boolean b = true?false:((true == true)?false:true);//false


Java code
boolean b = ((true?false:(true == true))?false:true);



1级 —— . ()
2级 —— ……
[/Quote]
照你这样想 ,(true?false:(true == true)得到的是false,而false?false:true 得到的是true,与运行结果错误,这怎么解释
回复
ChenJie2000 2011-08-17
Mark
回复
D_east 2011-08-16
我还是要MARK一下
回复
skran 2011-08-16
收藏收藏
回复
牛奶咖啡 2011-08-16
呃。。。收藏了,学习下
回复
墨书 2011-08-16
[Quote=引用 4 楼 guujiang 的回复:]
第一篇:
1、
a. 5
b. 6
c. 5
d. 6
理由:&、|与&&、||的区别在于短路的行为
2、
a. true
b. false
c. true
d. false
理由:应该是考察小范围内的缓存池
3、不知道
4、Integer.MIN_VALUE
理由:猜测+查文档
5、不知道
6、不知道

[/Quote]
第一篇第六个偷天换日.....第一个数字是12345没问题第二个数字偷偷给改成5432L了所以就成了17777的结果了。。。不是Number本身的 问题
回复
cento123 2011-08-15
收藏,顶
回复
Element 2011-08-15
谢谢楼主分享!
回复
lonkiss 2011-08-15
烙印~~
回复
huhuhuahua 2011-08-15
茴香豆的“茴” 有五种写法
回复
lixiaowen456654 2011-08-15
先顶起回家慢慢看
回复
xiaoyukid 2011-08-14
马克。。。。。
回复
maydie1989 2011-08-14
马克先 慢慢看

说什么也得拿准一题
回复
圣职者 2011-08-14
mark
回复
xingzhongyouyu 2011-08-14
学习了
回复
king_king_7 2011-08-14
mark
回复
发动态
发帖子
Java SE
创建于2007-09-28

6.1w+

社区成员

Java 2 Standard Edition
申请成为版主
社区公告
暂无公告