Algorithmique et langage Java

Exécuter sous condition

If et If ...else

Les instructions if... et if ... else... permettent d'aiguiller le programme vers un ensemble de commandes ou un autre, en fonction d'une condition.
Syntaxe :
    if (condition){
		instructions si condition vérifiée
		...
	 }
ou

   if (condition){
		instructions si condition vérifiée
      	....
   } 
   else
   {
		instructions si condition non vérifiée
		....
   }
La condition est une expression ou une variable booléenne.

Les instructions à effectuer dans chaque cas (condition vérifiée ou non) sont regroupées entre accolades { } : elles forment un bloc d'instructions.

package initial;
public class Inverse
{
  public static void main(String[] args)
  {
	ConsoleTexte mc=new ConsoleTexte();
	mc.ecritln("Ecris un nombre et je calculerai son inverse");
	double valeur=mc.getValeur();
	if (valeur!=0){
		mc.ecritln("Je peux calculer l'inverse de ce nombre non nul");
		mc.ecritln("L'inverse de "+valeur+" est "+1/valeur);
	};
  }
}

Exercice 1 : Compléter le programme précédent pour qu'il affiche comme précédemment l'inverse de la valeur saisie si elle est non nulle, ou "je ne peux pas calculer l'inverse de 0" quand l'utilisateur entre une valeur nulle.
On peut imbriquer des boucles les unes dans les autres comme dans cet exemple :
package initial;

public class CommunMultiple {

	public static void main(String[] args) {
		  ConsoleTexte mc=new ConsoleTexte();
		  int v;
		  boolean multipleDe7,multipleDe4,multipleDe5;
		  mc.ecritln("Donne-moi un nombre multiple de 7, de 5 et de 4");
		  v=(int)mc.getValeur();
		  multipleDe7=(v%7==0); // le booléen multipleDe7 sera vrai si v est multiple de 7, donc si le reste de la division de v par 7 est nul;
		  multipleDe4=(v%4==0);// le booléen multipleDe4 sera vrai si v est multiple de 4
		  multipleDe5=(v%5==0);// le booléen multipleDe5 sera vrai si v est multiple de 5
		  if (multipleDe7){ 
			  if (multipleDe4){
					  if (multipleDe5){
					  mc.ecritln("C'est bon!");
				  }
				  else mc.ecritln("Ce n'est pas un multiple de 5");
			  }
			  else mc.ecritln("Ce n'est pas un multiple de 4");
		  }
		  else mc.ecritln("Ce n'est pas un multiple de 7");     
	}

}
Ce programme vérifie d'abord si le nombre saisi est multiple de 7. Si ce n'est pas le cas il le signale et s'arrête. Si c'est le cas, il vérifie si le nombre est multiple de 4. Si ce n'est pas le cas il le signale et s'arrête. Si c'est le cas, il vérifie enfin si le nombre est multiple de 5. Si c'est le cas, il écrit "C'est bon!" car les trois conditions sont alors vérifiées, sinon il signale que le nombre n'est pas multiple de 5, et s'arrête.

On peut enchaîner un nombre quelconque de if...else if...else if... comme ici :

package initial;

public class CommunMultiple2 {

	public static void main(String[] args) {
		  ConsoleTexte mc=new ConsoleTexte();
		  int v;
		  boolean multipleDe7,multipleDe4,multipleDe5;
		  mc.ecritln("Donne-moi un nombre multiple de 7, de 5 et de 4");
		  v=(int)mc.getValeur();
		  multipleDe7=(v%7==0); // le booléen multipleDe7 sera vrai si v est multiple de 7, donc si le reste de la division de v par 7 est nul;
		  multipleDe4=(v%4==0);
		  multipleDe5=(v%5==0);
		  if (multipleDe7&&multipleDe4&&multipleDe5){
			  mc.ecritln("C'est bon!");
		  }
		  else if (multipleDe7&&multipleDe4&&!multipleDe5){
			  mc.ecritln("C'est un multiple de 7 et de 4 mais pas de 5");
		  }
		  else if (multipleDe7&&!multipleDe4&&multipleDe5){
			  mc.ecritln("C'est un multiple de 7 et de 5 mais pas de 4");
		  }
		  else if (!multipleDe7&&multipleDe4&&multipleDe5){
			  mc.ecritln("C'est un multiple de 5 et de 4 mais pas de 7");
		  }
		  else if (multipleDe7&&!multipleDe4&&!multipleDe5){
			  mc.ecritln("C'est un multiple de 7 mais pas de 4 ni de 5");
		  }
		  else if (!multipleDe7&&multipleDe4&&!multipleDe5){
			  mc.ecritln("C'est un multiple de 4 mais pas de 7 ni de 5");
				  }
		  else if (!multipleDe7&&!multipleDe4&&multipleDe5){
			  mc.ecritln("C'est un multiple de 5 mais pas de 4 ni de 7");
				  }
		  else mc.ecritln("Eh bien il faudra revoir les tables de multiplication, ce n'est ni un multiple de 7, ni de 5, ni de 4");
	}

}
Dans certains cas, plutôt qu'une succession de if... else if... on peut utiliser plutôt l'instruction "switch...case...", voir ci-dessous.
Exercice 2 : Ecrire un programme qui pose une ou plusieurs questions à l'utilisateur, et qui commente de façon différente suivant la ou les réponses, en utilisant l'instruction if...else...

switch...case...

. On peut effectuer un choix entre plusieurs possibilités à l'aide de l'instruction switch...case
package initial;
public class Romantisme
{
  public static void main(String[] args)
  {
    String reponse, commentaire;
	ConsoleTexte mc=new ConsoleTexte();
	mc.ecritln("Quel etait le prenom de Lamartine : Victor, Alphonse, Ernest ou Louis?");
	reponse=mc.getDonnees();
	switch (reponse)
    {
      case "Victor":
        commentaire="On a dit Lamartine, pas Hugo!";
        break;
      case "Alphonse":
        commentaire="Bravo";
        break;
      case "Ernest":
        commentaire="Mais pas du tout!";
        break;
      case "Louis":
        commentaire="A la rigueur... c'etait son troisieme prenom";
        break;
      default:
        commentaire="On a dit : Victor, Alphonse, Ernest ou Louis?";
	}
    mc.ecritln(commentaire);
  }
}

Le programme choisit entre plusieurs instructions en fonction de la valeur de reponse, que l'utilisateur a tapé au clavier.
switch...case peut être utilisé avec des variables primitives de type entier, caractère ou String.

 
Licence Creative Commons
licence Creative Commons Attribution - Pas d’Utilisation Commerciale - Partage dans les Mêmes Conditions 3.0 non transposé
Auteur : Nathalie Bonnin
Professeur de Physique, Chimie, Informatique au lycée La Martinière Monplaisir (Lyon 8ème)
Contact :
nathalie.bonnin (chez) scientillula.net
Licence Creative Commons
La totalité du contenu du site Scientillula.net appartient à Nathalie Bonnin et est mise à disposition selon les termes de la licence Creative Commons Attribution - Pas d’Utilisation Commerciale - Partage dans les Mêmes Conditions 3.0 non transposé