Java Puzzle

原创 2006年09月27日 23:11:00

今天听Sun的一个技术大会,其中讲到一些Java Puzzle,就是一些大家不常注意到的语法细节。以前一直觉得C++语法复杂,Java简单。其实,只要程序员愿意,一样可以写出晦涩难懂的烂Java程序。

具体题目已经不记得了,这里只能凭记忆写出题的大概。

 

题1:

public class Confusing ...{
    
public Confusing(Object o) ...
{
        System.out.println(
"object"
);
    }

    
public Confusing(double[] array) ...{
        System.out.println(
"double array"
);
    }

    
    
public static void main(String[] args) ...{
        
new Confusing(null
);
    }

}

 问:输出什么?

a) object   b) double array   c) won't compile d) other

答:这个题输出double array。题目中两个构造函数都符合要求,因为null可以是Object,也可以是double[],这时Java会选择类型最匹配的。所以选double array。

 

题2:

public class Number ...{
    
public static void main(String[] args) ...
{
        System.out.println(
2.00 - 1.10
);
    }

}

问:输出什么?

答:输出0.8999999999999999。这个倒是比较常见的问题。浮点数表示是不精确的。

 

题3:

public class X ...{
    
static public class Y ...
{
        
static public String Z = "white"
;
    }

    
    
static C Y;
    
    
public static void main(String[] args) ...
{
        System.out.println(X.Y.Z);
    }

}


class C ...{
    
static public String Z = "black"
;
}

问:输出什么?

a) white b) black c) compile error d) other

答:这个选b。Java中,当名字解析时发现多个匹配的结果时,varible>type>package,所以变量Y的优先级高于类Y,优先。

 

 题4:

public class StringLength ...{
    
public static void main(String[] args) ...
{
        
final String str1 = "length =10"
;
        
final String str2 = "length =" +
 str1.length();
        
        System.out.println(
"result is " + str1 ==
 str2);
    }

}

问:结果如何?

a) result is true   b) result is false   c) won't compile d) other

答:当时很多人在考虑final的string是否会由于编译器优化而使用同一个字符串,以至于==会返回true,争论在a和b。其实这个题目中由于+的优先级高于==,所以先执行字符串连接,得到的字符串再和str2比较,所以结果是输出false

 

题5:

public class compute ...{
    
public static void main(String[] args) ...
{
        
int x = 0
;
        
for (int i = 0; i < 3++i) ...
{
            x 
+= x++
;
        }

        
        System.out.println(
"x = " + x);
    }

}

问:输出多少?

答:这个题目输出0,很出人意料。因为+=和++从右往左开始算,等同于x = (x + x++); 先做x+x++,其中x++返回老值0,0+0结果还是0,之后x自增长为1,最后计算结果0赋值给x,x又变成0。所以执行多少次都是0。

这个题目真是变态,上台的8个同学全都答错,没有人能领走iPod shuffle,

 

 

Programming Assignment 4: 8 puzzle

8 puzzle给定点的集合,实现对于线段的识别。Board.javaBoard类用来表示一个n*n的网格,其中有n2−1n^2-1个方块,每个从1标记到n2−1n^2-1,还有一个方块是空。 这里...
  • zhangyuzuishuai
  • zhangyuzuishuai
  • 2017年03月29日 21:56
  • 582

227 - Puzzle

这题太坑了,所有数据都对,就是WA,放了好久,后来才知道是数据间的空行的原因。 各组数据之间要有空行,最前和最后都不能有空行,不然就是WA 在uva上只有空格的错误才是PE #include #inc...
  • weizhuwyzc000
  • weizhuwyzc000
  • 2015年01月28日 16:00
  • 642

Java 并发编程实战学习笔记——路径查找类型并行任务的终止

1.该类问题的递归串行算法(深度优先遍历) 代码 复制 - 运行 package net.jcip.examples; import java.util.*; /** *...
  • novelly
  • novelly
  • 2013年11月12日 18:00
  • 754

poj3678 Katu Puzzle 【解法一】

【2-SAT模板题】建图+dfs
  • sdfzyhx
  • sdfzyhx
  • 2016年08月04日 13:40
  • 359

poj3678 Katu Puzzle

Description Katu Puzzle is presented as a directed graph G(V, E) with each edge e(a, b) labeled b...
  • qq_34593871
  • qq_34593871
  • 2016年06月10日 21:26
  • 291

POJ 3678 - Katu Puzzle 比较典型的构图2-sat...求是否有可行解

题意:   有N个Xi...又告诉M个位运算( AND OR XOR  )结果..问是否有存在可行解            题解  每个Xi就两种情况..并且必须选择一个..符合2-sat的模型....
  • kk303
  • kk303
  • 2013年08月03日 19:59
  • 1031

Principle of Computing (Python)学习笔记(8) Fifteenth Puzzle

这期project相对较复杂。
  • feliciafay
  • feliciafay
  • 2014年08月08日 16:34
  • 2202

谜题(Puzzle, ACM/ICPC World Finals 1993, UVa227)(难死了!!)

有一个5*5的网格,其中恰好有一个格子是空的,其他格子各有一个字母。一共有4种指令:A, B, L, R,分别表示把空格上、下、左、右的相邻字母移到空格中。输入初始网格和指令序列(以数字0结束),输出...
  • yiyou1996
  • yiyou1996
  • 2016年02月06日 22:34
  • 839

2017 ICPC 北京站 H (hihocoder 1634) Puzzle Game (dp 最大子矩阵和)

解题思路: 很容易想到的是如果需要修改的话我们一定要对最大子矩阵的内部修改。不然最大值始终不变。 所以我们需要维护出最大子矩阵的位置,那么如果有多个最大子矩阵怎么办呢?维护任意一个即可。后面会说明...
  • wchhlbt
  • wchhlbt
  • 2017年11月20日 13:50
  • 423

8-puzzle 可解性的证明 & 最优解性的证明

问题来自Coursera上Princeton所开Algorithms Part I第四周的作业:http://coursera.cs.princeton.edu/algs4/assignments/8...
  • Jason_Ranger
  • Jason_Ranger
  • 2016年09月21日 23:38
  • 2599
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Java Puzzle
举报原因:
原因补充:

(最多只允许输入30个字)