2010-09-02 4 views
2

Une autre question SCJP. Je pense que la sortie est K = 7, mais la réponse du livre est "la compilation échoue". Je ne vois rien de mal avec le code.Pourquoi la compilation devrait-elle échouer pour ce code?

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: Les deux signes stupides = dans les lignes 6 et 7, et le cas avec des accolades manquantes en 7, sont intentionnelles. La question vise à tester mes connaissances sur la façon dont ces choses agissent lorsqu'elles sont mal utilisées, je suppose.

+0

Avez-vous essayé de le compiler vous-même? (Indice, regardez votre logique booléenne en comparant "j" et "vrai") –

+0

Asker ne les compare pas, j est assigné à true, ce qui retourne vrai – MStodd

+1

Tous ces nombres sur le côté ('1.',' 2. ', etc.) va totalement confondre le compilateur! :-) – Ken

Répondre

2

OK, compilé. La sortie est en effet k = 7. Anita: 1, livre: 0. Merci à tous!

+2

Il n'est pas rare que ces livres SCJP donnent des réponses incorrectes. Vérifiez les dernières errata sur le site du livre, le cas échéant. Ceci (et d'autres erreurs) a peut-être déjà été reconnu. – samitgaur

+0

C'est en effet dans l'errata! –

1

Vous avez complètement raison. Il compile (la réponse précédente était fausse), malgré l'affectation sommaire comme valeur, et c'est la sortie.

+0

L'affectation en valeur est légale pour tout type *. Vous avez juste besoin que la condition générale du 'si' soit un' booléen'. – dan04

+0

@dan, vous avez raison. J'essayais de dire que vous ne pouvez utiliser qu'une affectation booléenne comme valeur * directement * comme condition, par ex. 'if (a = true)', mais je l'ai mal formulé, et le code ne le fait pas. –

0

Oui, ça me va bien. Est-ce dans un fichier correctement nommé?

+2

Il n'est pas nécessaire d'avoir un nom particulier, car la classe n'est pas publique. –

+1

Ahh, vous avez raison. J'ai appris quelque chose. – MStodd

Questions connexes