2010-09-02 128 views
2

另一个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都是故意的。我想这个问题是为了测试我在误用这些事情时的行为方式。

+0

您是否尝试自己编译它? (提示,看看你的布尔逻辑比较“j”和“true”) – 2010-09-02 00:03:36

+0

Asker没有比较它们,j被分配给true,它返回true – MStodd 2010-09-02 00:16:30

+1

所有这些数字在侧面('1.','2。 '等)将完全混淆编译器! :-) – Ken 2010-09-02 01:06:03

回答

2

好的,编译它。输出确实是k = 7。阿妮塔:1,书:0.谢谢大家!

+2

这些SCJP书籍并不少见,给出了不正确的答案。如果有的话,请检查本书网站上的最新勘误表。这(和其他错误)可能已被确认。 – samitgaur 2010-09-02 00:46:38

+0

确实是在勘误中! – 2010-09-02 01:37:32

1

你完全正确。它编译(以前的答案是错误的),尽管粗略的赋值作为值,那就是输出。

+0

赋值作为* any *类型的合法值。你只需要'if'的整体条件是'boolean'。 – dan04 2010-09-02 00:11:13

+0

@dan,你说得对。我试图说,你只能使用布尔赋值作为value * directly *作为条件,例如, 'if(a = true)',但我说的很差,而且代码实际上并没有这样做。 – 2010-09-02 00:14:43

0

是的,看起来不错。它是否在正确命名的文件中?

+2

它不需要具有特定的名称,因为该类不公开。 – 2010-09-02 00:10:01

+1

啊,你是对的。我学到了东西。 – MStodd 2010-09-02 00:12:52