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

Leave a Reply

Telechargement