TP java avec solution les bases de la programmation JAVA Exercices Corriges JAVA : Niveau debutant partie 2
Exercice 1 : Opérateurs logiques à "court circuit"
Quels résultats fournit ce programme ?
Quels résultats fournit ce programme ?
public class CourCir
{ public static void main (String args[])
{ int i=10, j=5 ;
if (i<5 && j++<10) System.out.println ("&&1 vrai") ;
else System.out.println ("&&1 faux") ;
System.out.println ("i = " + i + " j = " + j) ;
if (i<5 & j++<10) System.out.println ("& vrai") ;
else System.out.println ("& faux") ;
System.out.println ("i = " + i + " j = " + j) ;
if (i<15 && j++<10) System.out.println ("&&2 vrai") ;
else System.out.println ("&&2 faux") ;
System.out.println ("i = " + i + " j = " + j) ;
if (i<15 || j++<10) System.out.println ("|| vrai") ;
else System.out.println ("|| faux") ;
System.out.println ("i = " + i + " j = " + j) ;
}
}
Exercice 2 : Priorités des opérateurs
Éliminer les parenthèses superflues dans les expressions suivantes :
- a = (x+5) // 1
- a = (x=y)+ 2 // 2
- a = (x = (y+2)) // 3
- (a<b) && (c<d) // 4
- (i++) * (n+p) // 5
- x += (n%p) // 6
- n = (p+=5) // 7
Exercice 3 : Affectation et conversion
Soit ces déclarations :
- byte b ; short p ; int n ; long q ;
- final int N=10 ;
- float x ; double y ;
Parmi les expressions suivantes, lesquelles sont incorrectes et pourquoi ? Lorsque l’expression est correcte, citer les conversions éventuellement mises en jeu.
- b = n // 1
- b = 25 // 2
- b = 500 // 3
- x = 2*q // 4
- y = b*b // 5
- p = b*b // 6
- b = b+5 // 7
- p = 5*N-3 // 8
Correction des Exercices - Solution des TP JAVA
------------------------------------------------------------------------------------------Solution Exercice 1 :
&&1 faux
i = 10 j = 5
& faux
i = 10 j = 6
&&2 vrai
i = 10 j = 7
|| vrai
i = 10 j = 7
Il faut simplement tenir compte de la proprité particulière dont bénéficient les opérateurs && et || dits à court-circuit. Ils n’évaluent leur second opérande que lorsque cela est nécessaire.
Solution Exercice 1 :
a = x+5 // 1
a = (x=y)+ 2 // 2
a = x = y+2 // 3
a<b && c<d // 4
i++ * (n+p) // 5
x += n%p // 6
n = (p+=5) // 7
Solution Exercice 3 :
- b = n ; // 1 Erreur
La conversion de int en byte n’est pas autorisée par affectation.
- b = 25 ; // 2 OK
D’une manière générale, la conversion de int en byte n’est pas acceptée par affectation. Mais une exception a lieu pour les expressions constantes (calculables à la compilation), à condition que leur valeur soit représentable dans le type d’arrivée, ce qui est manifestement le cas ici.
- b = 500 ; // 3 Erreur
On est dans la même situation que précédemment, avec cette différence que la valeur 500 n’est pas représentable dans le type byte.
- x = 2*q ; // 4 OK
Ici, l’expression 2*q est évaluée en effectuant la conversion d’ajustement de type de 2 en long. Puis le résultat, de type long, est converti dans le type float avant d’être affecté à x.
- y = b*b ; // 5 OK
La valeur de l’expression b*b est évaluée en effectuant la promotion numérique de b en int. Le résultat, de type int, est converti dans le type double avant d’être affecté à y.
- p = b*b ; // 6 Erreur
Là encore, la valeur de l’expression b*b est de type int. La conversion de int en short est illégale par affectation.
- b = b+5 ; // 7 Erreur
La valeur de l’expression b+5 est de type int. La conversion de int en short est illégale par affectation.
- p = 5*N-3 ; // 8 OK
L’expression 5*N-3 est de type int. Mais comme il s’agit d’une expression constante (calculable à la compilation), sa conversion en short est légale par affectation pour peu que sa valeur soit représentable dans ce type, ce qui est le cas ici.
Article plus récent Article plus ancien