摘要:
请提供一个对i的声明,将下面的循环转变为一个无限循环: 与前一个谜题不同,你必须在你的答案中不使用浮点数。换句话说,你不能把i声明为double或float类型的。 与前一个谜题一样,这个谜题初看起来是不可能实现的。毕竟,一个数字总是等于它自身加上0,你被禁止使用浮点数,因此不能使用NaN,而在整数 阅读全文
摘要:
请提供一个对i的声明,将下面的循环转变为一个无限循环: 回想一下,>>>=是对应于无符号右移操作符的赋值操作符。0被从左移入到由移位操作而空出来的位上,即使被移位的负数也是如此。 这个循环比前面三个循环要稍微复杂一点,因为其循环体非空。在其循环体中,i的值由它右移一位之后的值所替代。为了使移位合法, 阅读全文
摘要:
请提供一个对i的声明,将下面的循环转变为一个无限循环: 噢,不,不要再给我看起来不可能的循环了!如果i <= j 并且 j <= i,i不是肯定等于j吗?这一属性对实数肯定有效。事实上,它是如此地重要,以至于它有这样的定义:实数上的≤关系是反对称的。Java的<=操作符在5.0版之前是反对称的,但是 阅读全文
摘要:
请提供一个对i的声明,将下面的循环转变为一个无限循环: 这个循环可能比前一个还要使人感到困惑。不管在它前面作何种声明,它看起来确实应该立即终止。一个数字总是等于它自己,对吗? 对,但是IEEE 754浮点算术保留了一个特殊的值用来表示一个不是数字的数量[IEEE 754]。这个值就是NaN(“不是一 阅读全文
摘要:
下面的谜题以及随后的五个谜题对你来说是扭转了局面,它们不是向你展示某些代码,然后询问你这些代码将做些什么,它们要让你去写代码,但是数量会很少。这些谜题被称为“循环者(looper)”。你眼前会展示出一个循环,它看起来应该很快就终止的,而你的任务就是写一个变量声明,在将它作用于该循环之上时,使得该循环 阅读全文
摘要:
与谜题26中的程序一样,下面的程序也包含了一个记录在终止前有多少次迭代的循环。与那个程序不同的是,这个程序使用的是左移操作符(<<)。你的任务照旧是要指出这个程序将打印什么。当你阅读这个程序时,请记住 Java 使用的是基于2的补码的二进制算术运算,因此-1在任何有符号的整数类型中(byte、sho 阅读全文
摘要:
下面的程序计算了一个循环的迭代次数,并且在该循环终止时将这个计数值打印了出来。那么,它打印的是什么呢? 如果你没有非常仔细地查看这个程序,你可能会认为它将打印100,因为END比START大100。如果你稍微仔细一点,你可能会发现该程序没有使用典型的循环惯用法。大多数的循环会在循环索引小于终止值时持 阅读全文
摘要:
下面的程序对一个变量重复地进行增量操作,然后打印它的值。那么这个值是什么呢? 乍一看,这个程序可能会打印100。毕竟,它对j做了100次增量操作。可能会令你感到有些震惊,它打印的不是100而是0。所有的增量操作都无影无踪了,为什么? 就像本谜题的题目所暗示的,问题出在了执行增量操作的语句上: 大概该 阅读全文
摘要:
下面的程序循环遍历byte数值,以查找某个特定值。这个程序会打印出什么呢? 这个循环在除了Byte.MAX_VALUE之外所有的byte数值中进行迭代,以查找0x90。这个数值适合用byte表示,并且不等于Byte.MAX_VALUE,因此你可能会想这个循环在该迭代会找到它一次,并将打印出Joy!。 阅读全文
摘要:
下面的程序将打印一个单词,其第一个字母是由一个随机数生成器来选择的。请描述该程序的行为: 乍一看,这个程序可能会在一次又一次的运行中,以相等的概率打印出Pain,Gain或 Main。看起来该程序会根据随机数生成器所选取的值来选择单词的第一个字母:0选M,1选P,2选G。谜题的题目也许已经给你提供了 阅读全文