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);
}
}
}
Remarque:
Les instructions d'interruption
ordinaires ont
l’inconvénient de n'interrompre que du niveau (boucle ou
switch) le plus
interne. Dans certains cas, cela s’avère insuffisant. Par
exemple, on peut
souhaiter sortir de deux boucles imbriquées.
Java permet l'utilisation de ces instructions avec une étiquette
qui doit alors figurer devant la structure dont on souhaite sortir
(identificateur usuel ). Les étiquettes doivent être
séparées de la structure avec deux points.
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;
}
}
}
}
}