TP avec Solution : Operateurs conditionnel et incrementation en JAVA - Exercices java correction
Exercice 1 : Opérateurs d’incrémentation, de décrémentation et d’affectation élargie
Quels résultats fournit ce programme ?
public class OpIncr
{ public static void main(String[] args)
{ int i, j, n ;
i = 0 ; n = i++ ;
System.out.println ("A : i = " + i + " n = " + n ) ;
i = 10 ; n = ++ i ;
System.out.println ("B : i = " + i + " n = " + n ) ;
i = 20 ; j = 5 ; n = i++ * ++ j ;
System.out.println ("C : i = " + i + " j = " + j + " n = " + n ) ;
i = 15 ; n = i += 3 ;
System.out.println ("D : i = " + i + " n = " + n) ;
i = 3 ; j = 5 ; n = i *= --j ;
System.out.println ("E : i = " + i + " j = " + j + " n = " + n) ;
}
}
Solution
- A : i = 1 n = 0
- B : i = 11 n = 11
- C : i = 21 j = 6 n = 120
- D : i = 18 n = 18
- E : i = 12 j = 4 n = 12
Exercice 2 : Opérateurs d’incrémentation et d’affectation élargie
Soit ces déclarations :
byte b ; short p ; char c ; int n ; float x ;
Parmi les expressions suivantes, lesquelles sont incorrectes et pourquoi ?
- c = c + 1 // 1
- c++ // 2
- c += 3 // 3
- b += c // 4
- p += b // 5
- p = p + b // 6
- n += x // 7
- n = n + x // 8
- x++ ; // 9
Solution
- c = c + 1 // 1 Erreur
L’expression c+1 est du type int qui ne peut pas être converti en char par affectation.
- c++ // 2 OK
Ici, l’opérateur ++ applique son incrémentation de 1 directement à la variable c de type char.
Aucune conversion n’est mise en jeu.
- c += 3 // 3 OK
Cette expression est en fait équivalente à c=(char) (c+3) et non simplement à c=c+3. Dans ces conditions, elle évalue bien l’expression c+3 dans le type int mais elle en force ensuite la conversion en char. Notez bien que l’affectation c=c+3 serait illégale.
- b += c // 4 OK
Cette expression est équivalente à b = (byte) (b+c).
- p += b // 5 OK
Cette expression est équivalente à p = (short) (p+b).
- p = p + b // 6 Erreur
La valeur de l’expression p+b est de type int (les deux opérandes de + sont soumis aux promotions numériques en int). Elle ne peut pas être convertie en short par affectation. Notez la différence avec l’expression précédente.
- n += x // 7 OK
Cette expression est équivalente à n = (int) (n+x). Notez cependant qu’on emploie rarement l’opérateur += de cette manière.
- n = n + x // 8 Erreur
L’expression n+x est de type float et sa valeur ne peut pas être convertie par affectation en int.
- x++ // 9 OK
Cette expression joue le même rôle que x=x+1. En pratique, on emploie rarement les opérateurs d’incrémentation ou de décrémentation sur des variables flottantes.
Exercice 3 : Opérateur conditionnel
Quels résultats fournit ce programme ?
public class OpCond
{ public static void main(String[] args)
{ int n=10, p=5, q=10 ;
n = p = q = 5 ;
n += p += q ;
System.out.println ("A : n = " + n + " p = " + p + " q = " + q) ;
q = n < p ? n++ : p++ ;
System.out.println ("B : n = " + n + " p = " + p + " q = " + q) ;
q = n > p ? n++ : p++ ;
System.out.println ("C : n = " + n + " p = " + p + " q = " + q) ;
}
}
Solution
- A : n = 15 p = 10 q = 5
- B : n = 15 p = 11 q = 10
- C : n = 16 p = 11 q = 15
Article plus récent Article plus ancien