实用程序员的练习19

时间:2011-11-04 12:23:30

标签: java language-agnostic

这取自实用程序员的练习19。

快速检查现实。哪些“不可能”的事情会发生?:

  1. 少于28天的月份

  2. stat(“。”,& sb)== -1(即无法访问当前目录)

  3. 在C ++中:a = 2; b = 3; if (a + b != 5) exit(1);

  4. 内角为≠180°的三角形

  5. 没有60秒的分钟

  6. 在Java中:(a + 1) <= a

  7. 我有一些答案,但我不认为我的答案是“正确的”(从某种意义上说,这是作家在撰写问题时所考虑的答案)。

    这是我的尝试:

      

    1)September 1752

         

    2) - 我想我们可以跳过这个,而不是理解问题 -

         

    3)我不了解C ++,但它是否与线程和volatile变量(如Java)有关?

         

    4)不可能......

         

    5)Due to occurence of leap Seconds

         

    6)double a = 100000000000000001d;

    我想知道是否有人知道这些问题的正确的答案?

3 个答案:

答案 0 :(得分:13)

3:如果a和b属于类类型,则重载运算符+可以执行任何(或重载赋值运算符,或运算符!=,或者甚至是隐式转换运算符)。

4:曲面上的三角形的内角总和不是180。

6:a。溢出。

问题的关键是恕我直言,以证明很多“不可能”的事情确实发生了,并且当你在非常防守的情况下编程时,你可能不仅仅是偏执狂。

答案 1 :(得分:6)

2很容易发生。例如如果您在进入目录时删除目录,然后执行某些操作。许多程序实际上处理这个。

noufal@sanitarium% ls
noufal@sanitarium% cd
noufal@sanitarium% mkdir /tmp/foo
noufal@sanitarium% cd /tmp/foo
noufal@sanitarium% touch x
noufal@sanitarium% ls
x
noufal@sanitarium% rm -Rf /tmp/foo
noufal@sanitarium% ls
noufal@sanitarium% touch x
touch: cannot touch `x': No such file or directory

答案 2 :(得分:3)

nr 5发生在leap seconds

的情况下