此代码为什么编译失败?
另一个SCJP问题。我认为输出是K = 7,但本书的答案是“编译失败”。我只是没有看到代码有任何问题。此代码为什么编译失败?
1. class RevQOne{
2. public static void main(String [] args) {
3. boolean i = true;
4. boolean j = false;
5. short k = 10;
6. if((k == 10) && (j = true))k--;
7. if((i = false) || (k == 9))
8. k--;
9. k--;
10. System.out.println("k=" + k);
11. }
12. }
PS:第6行和第7行中的愚蠢=符号以及7中缺少大括号的if都是故意的。我想这个问题是为了测试我在误用这些事情时的行为方式。
好的,编译它。输出确实是k = 7。阿妮塔:1,书:0.谢谢大家!
这些SCJP书籍并不少见,给出了不正确的答案。如果有的话,请检查本书网站上的最新勘误表。这(和其他错误)可能已被确认。 – samitgaur 2010-09-02 00:46:38
确实是在勘误中! – 2010-09-02 01:37:32
你完全正确。它编译(以前的答案是错误的),尽管粗略的赋值作为值,那就是输出。
赋值作为* any *类型的合法值。你只需要'if'的整体条件是'boolean'。 – dan04 2010-09-02 00:11:13
@dan,你说得对。我试图说,你只能使用布尔赋值作为value * directly *作为条件,例如, 'if(a = true)',但我说的很差,而且代码实际上并没有这样做。 – 2010-09-02 00:14:43
是的,看起来不错。它是否在正确命名的文件中?
它不需要具有特定的名称,因为该类不公开。 – 2010-09-02 00:10:01
啊,你是对的。我学到了东西。 – MStodd 2010-09-02 00:12:52
您是否尝试自己编译它? (提示,看看你的布尔逻辑比较“j”和“true”) – 2010-09-02 00:03:36
Asker没有比较它们,j被分配给true,它返回true – MStodd 2010-09-02 00:16:30
所有这些数字在侧面('1.','2。 '等)将完全混淆编译器! :-) – Ken 2010-09-02 01:06:03