4. Les instructions de
contrôle
4.1
Portée d'un bloc
Un bloc (instruction composée), -
groupe d’instructions simples délimitées par une
paire d'accolades. Portée des variables. Un bloc peut être imbriqué
à l'intérieur d'un autre bloc.
public class Controle {
public static void main(String[] arg){
int n= 4;
{
int k = 5;
{
int m=3;
} // m est
valable jusqu'ici
}
// k est
valable jusqu'ici
}
}
public class Controle {
public static void main(String[] arg){
int n= 4;
{
int k = 5;
int
n; // erreur - variable existe
}
}
}
4.2
Instructions conditionnelles
Réalistion des choix. if , if/else et switch
4.2.1 Instruction conditionnelle
if

Fig. 4.1 Organigramme de l'instruction if
public class Controle {
public static void main(String[] arg){
int grade = 4;
if( grade > 3 ) {
System.out.println("Congratulations!");
System.out.println("You passed!");
}
}
}
4.2.2
Instruction conditionnelle if/else

Fig. 4.2 Organigramme de l'instruction if/else
public class Controle {
public static void main(String[] arg){
int grade = 4;
if( grade > 3 ) {
System.out.println("Congratulations!");
System.out.println("You passed!");
}
else {
System.out.println("Sorry!");
System.out.println("You failed!");
}
}
}
Exemple. la plus
grande valeur des trois nombres
public class Controle {
public static void main(String[] arg){
int k,a=8,b=7,c=5;
if(a>b)
if(a>c)
k=a;
else
k=c;
else
if(b>c)
k=b;
else
k=c;
System.out.println("max value:
"+k);
}
}
4.2.3
Instruction switch

Fig. 4.3. Organigramme de l'instruction switch
La syntaxe de l'instruction est le suivant:
switch (expression){
case constante_1 : [ suite_d
instructions_1 ]
case constante_2 : [ suite_d
instructions_2 ]
..............
case constante_n : [ suite_d
instructions_n ]
[ default :
suite_d instructions ]
}
Type
Expression - byte,
short, char ou int (ou
énuméré depuis le Java 5, ou String depuis Java 7). Long - pas possible!
public class Controle {
public static void main(String[] arg){
int grade = 4;
switch (grade) {
case 0:
case 1:
case 2:
System.out.println("You failed!"); break;
case 3:
System.out.println("with great difficulty!"); break;
case 4:
System.out.println("You passed!"); break;
case 5:
System.out.println("You are good");break;
case 6:
System.out.println("You are very good");break;
default: System.out.println("This
is not possible!");
}
}
}
public class Controle {
public static void main(String[] arg){
int grade = 4;
switch (grade) {
case 0:
case 1:
case 2:
System.out.println("You failed!");
case 3:
System.out.println("with great difficulty!");
case 4:
System.out.println("You passed!");
case 5:
System.out.println("You are good");
case 6:
System.out.println("You are very good");
default: System.out.println("This
is not possible!");
}
}
}
4.3
Instructions boucles
Deux types de boucles – ceux
qui font le test
après le traitement et si qui font le test avant.
4.3.1
L’instruction do... while

Fig. 4.4 Organigramme de l'instruction do…while
public class Controle {
public static void main(String[] arg){
int n;
do{
n =
(int)(Math.random()*3); //nombre
aléatoire dans l'intervalle [0,2]
System.out.println("n= "+n);
}
while(n!=0);
}
}
4.3.2
L’instruction while

Fig. 4.5 Organigramme de l'instruction while
public class Controle {
public static void main(String[] arg){
int n=3;
while(n>0){
System.out.println("n= "+n--);
}
}
}
4.3.3
Instruction for
for ( [initialisation] ; [condition] ;
[incrémentations])
instruction

Fig. 4.6. Organigramme de l'instruction for
public class Controle {
public static void main(String[] arg){
int i,j;
for(i=5,j=6;j<8;j++,i++)
System.out.println("i:"+i+"\tj: "+j);
}
}
public class Controle {
public static void main(String[] arg){
for(int i=5,j=6;j<8;j++,i++)
System.out.println("i:"+i+"\tj: "+j);
}
}
for (int i=3, double y=7. ; ..... ) // erreur
public class Controle {
public static void main(String[] arg){
for(double x
=0.;x!=1.5;x+=0.1) //boucle infinie
System.out.println("x= "+x);
}
}
4.4
Instructions d'interruption break et continue
• L'instruction
break quitte le bloc d'instructions
• L'instruction
continue quitte le bloc d'instructions mais reviens au test

Fig.4.7 Interruptions dans boucle do-while
attention avec continue
de ne pas arriver à une boucle infinie.
public class Controle {
public static void main(String[] arg){
int i =0;
do{
i++;
if(i==4)break;
if(i==2)continue;
System.out.println("i= "+i);
}
while(i<15);
}
}

Fig. 4.8 Interruptions dans boucle while
Il faut faire attention avec continue de ne pas arriver à une boucle
infinie.
public class Controle {
public static void main(String[] arg){
int i =-1;
while(i<15){
i++;
if(i==4)break;
if(i==2)continue;
System.out.println("i= "+i);
}
}
}

Fig. 4.9 Interruptions dans boucle for
public class Controle {
public static void main(String[] arg){
for(int i = 0;i<15;i++){
if(i==4)break;
if(i==2)continue;
System.out.println("i= "+i);
}
}
}
Exemples:
Sur quelle ligne et quelle colonne est trouvé pour la
première fois la valeur searchNum(dans ce cas 6)
public class Controle {
public static void main(String arg[]) {
int[][] numbers = { { 1, 2, 3 },
{ 6, 5, 12}, { 6, 8, 18 } };
int searchNum = 6,i=0,j=0;
boolean foundNum = false;
outLoop: for (i=0; i <
numbers.length; i++) {
for (j=0; j
< numbers[i].length; j++) {
if (searchNum == numbers[i][j]) {
foundNum = true;
break outLoop;
}
}
}
if (foundNum)
System.out.println(searchNum + " found on ["+i+","+j+"]");
else
System.out.println(searchNum + " not found!");
}
}
Le
deuxième programme cherche à afficher les numéros
des lignes ou cette valeur
est trouvée
public class Controle {
public static void main(String arg[]) {
int[][] numbers = { { 1, 2, 3 },
{ 6, 5, 12}, { 6, 8, 18 } };
int searchNum = 6,i=0,j=0;
searchLabel: for (i=0; i <
numbers.length; i++) {
for (j=0; j
< numbers[i].length; j++) {
if (searchNum == numbers[i][j]) {
System.out.println(searchNum + "
found on line:"+i);
continue searchLabel;
}
}
}
}
}