[Introduction à Java] Branchement conditionnel (instruction if, instruction if-else, instruction else if, opérateur ternaire, instruction switch)

Objectif

Pour ceux qui viennent de commencer à apprendre la programmation, y compris le langage Java, et ceux qui l'ont déjà appris, pour examen Cette fois, j'écris pour en savoir plus sur le ** branchement conditionnel **.

[Introduction à Java]

Qu'est-ce que la ramification conditionnelle?

Il s'agit de diviser le traitement à exécuter selon que les conditions du code source sont satisfaites. ʻSi 〇〇, processus A, si △△, processus B. C'est comme `.

if déclaration

Il est utilisé lorsque vous avez une expression conditionnelle et effectuez un traitement en fonction du résultat de cette condition. Le résultat de l'expression conditionnelle est retourné avec une valeur booléenne (true, false), et lorsque ** true, le traitement dans l'instruction if est exécuté. ** **

syntaxe


if(Expression conditionnelle) { 
En traitement
};

Par exemple, ** si l'expression conditionnelle est vraie. ** **

Exemple où if est vrai


int num = 10;
if (num < 20) {
  System.out.println("la valeur num est inférieure à 20");
}
System.out.println("Traitement après l'instruction if");

Le résultat de l'exécution est le suivant.

python


la valeur num est inférieure à 20
Traitement après l'instruction if

Puisque l'expression conditionnelle est jugée et que le résultat est vrai, le traitement à l'intérieur du bloc d'instructions if est exécuté, puis le traitement à l'extérieur du bloc if est exécuté. Ce sera le flux.

** Si l'expression conditionnelle est fausse. ** **

exemple si if est faux


int num = 10;
if (num < 5) {
  System.out.println("la valeur num est inférieure à 5");
}
System.out.println("Traitement après l'instruction if");

Le résultat de l'exécution est le suivant.

Résultat d'exécution


Traitement après l'instruction if

Puisque l'expression conditionnelle est fausse, le traitement à l'intérieur du bloc d'instructions if n'est pas exécuté et seul le traitement suivant est exécuté.

Il est également possible d'écrire une instruction if à l'intérieur de l'instruction if. Il s'appelle ** imbriqué **. Cependant, soyez prudent car il sera difficile à lire si vous en écrivez trop.

si nidification


int num = 10;

if (num > 0) {
  System.out.println("num est une valeur positive");
  if (num % 2 == 0) {
    System.out.println("num est pair");
  }
}

Précautions lors de la comparaison des valeurs

Pour comparer si les valeurs sont identiques, écrivez ==. Notez que s'il n'y a qu'un seul =, ce sera un opérateur d'affectation au lieu d'un opérateur relationnel.

Ce qui suit entraînera une erreur de compilation.

Code invalide


int a = 20;
int b = 50;
if (a = b) { //L'expression conditionnelle ne tient pas, simplement en remplaçant b par a de type int.
  System.out.println("Les valeurs de a et b sont les mêmes");
}

Comparez les valeurs comme suit.

Code valide


int a = 50;
int b = 50;
if (a == b) {
  System.out.println("Les valeurs de a et b sont les mêmes");
}

Résultat d'exécution


Les valeurs de a et b sont les mêmes

Certains modèles ne provoquent pas d'erreur de compilation même si vous effectuez une affectation au niveau de l'expression conditionnelle.

Exemple d'affectation dans une expression conditionnelle


boolean bool1 = false;
boolean bool2 = true;
if(bool1 = bool2) { //À la suite de l'affectation, la valeur booléenne est renvoyée, il n'y a donc aucun problème en tant qu'expression conditionnelle.
  System.out.println("bool1: " + bool1);
  System.out.println("bool2: " + bool2);
}

Suite à la substitution de true bool2 par false bool1, l'expression conditionnelle devient vraie. Par conséquent, le traitement dans le bloc d'instructions if est exécuté.

Résultat d'exécution


bool1: true
bool2: true

instruction if-else

Vous pouvez décrire et exécuter le processus que vous souhaitez exécuter non seulement lorsque l'expression conditionnelle est vraie, mais également lorsqu'elle est fausse.

syntaxe


if(Expression conditionnelle) { 
Processus 1
} else {
Processus 2
};

Le processus 1 est exécuté lorsque l'expression conditionnelle est vraie et le processus 2 est exécuté lorsque l'expression conditionnelle est fausse.

Par exemple, ** si l'expression conditionnelle est vraie. ** **

Exemple où if est vrai


String name1 = "Yanagida";
String name2 = "Yanagida";
if (name1 == name2) {
  System.out.println("name1 et name2 sont identiques");
} else {
  System.out.println("name1 et name2 ne sont pas identiques");
}
System.out.println("if-Traitement après la déclaration");

Le résultat de l'exécution est le suivant.

Résultat d'exécution


name1 et name2 sont identiques
if-Traitement après la déclaration

Puisque l'expression conditionnelle est vraie, le traitement à l'intérieur du bloc d'instructions if est exécuté. Ensuite, l'intérieur du bloc else n'est pas exécuté et le traitement en dehors du bloc d'instructions if est exécuté. Ce sera le flux.

** Si l'expression conditionnelle est fausse. ** **

exemple si if est faux


String name1 = "Cristiano Ronaldo";
String name2 = "Lionel Messi";
if (name1 == name2) {
  System.out.println("name1 et name2 sont identiques");
} else {
  System.out.println("name1 et name2 ne sont pas identiques");
}
System.out.println("if-Traitement après la déclaration");

Le résultat de l'exécution est le suivant.

Résultat d'exécution


name1 et name2 ne sont pas identiques
if-Traitement après la déclaration

Puisque l'expression conditionnelle est fausse, le traitement à l'intérieur du bloc d'instructions if n'est pas exécuté et le traitement du bloc d'instructions else est en cours d'exécution. Ensuite, le traitement en dehors du bloc d'instructions if est exécuté. Ce sera le flux.

Vous pouvez maintenant implémenter le traitement lorsque l'expression conditionnelle est fausse.

else if instruction

Jusqu'à présent, il n'y avait qu'une seule expression conditionnelle, mais vous pouvez utiliser plusieurs expressions conditionnelles en utilisant l'instruction else if.

syntaxe


if(Expression conditionnelle 1) { 
Processus 1
} else if (Expression conditionnelle 2) {
Processus 2
} else {
Processus 3
};

Le processus 1 est exécuté lorsque l'expression conditionnelle 1 est vraie, le processus 2 est exécuté lorsque l'expression conditionnelle 2 est vraie et le processus 3 est exécuté lorsque les première et deuxième expressions conditionnelles sont fausses.

** L'instruction else if évalue les expressions conditionnelles dans l'ordre à partir du haut, et si une certaine condition est vraie, seule l'instruction de traitement de ce bloc est exécutée. ** **

Par exemple, ** si l'expression conditionnelle est vraie. ** **

Exemple où if est vrai


String color = "red";
if (color == "red") {
  System.out.println("la couleur est rouge");
} else if (color == "yellow") {
  System.out.println("la couleur est jaune");
} else {
  System.out.println("la couleur n'est ni rouge ni jaune");
  System.out.println("La couleur est" + color);
}
System.out.println("sinon si exemple");

Le résultat de l'exécution est le suivant.

Résultat d'exécution


la couleur est rouge
sinon si exemple

Puisque la première expression conditionnelle est vraie, le traitement à l'intérieur du bloc d'instructions if est exécuté. Ensuite, le else if et l'intérieur du bloc else ne sont pas exécutés, et le traitement en dehors du bloc d'instructions if est exécuté. Ce sera le flux.

Puis ** si l'expression conditionnelle sinon si est vraie. ** **

else-Exemple où if est vrai


String color = "yellow";
if (color == "red") {
  System.out.println("la couleur est rouge");
} else if (color == "yellow") {
  System.out.println("la couleur est jaune");
} else {
  System.out.println("la couleur n'est ni rouge ni jaune");
  System.out.println("La couleur est" + color);
}
System.out.println("sinon si exemple");

Le résultat de l'exécution est le suivant.

Résultat d'exécution


la couleur est jaune
sinon si exemple

Puisque la première expression conditionnelle est fausse, le traitement à l'intérieur du bloc d'instructions if n'est pas exécuté. Et comme la deuxième expression conditionnelle est vraie, le traitement dans le bloc d'instruction else if est exécuté. L'intérieur du bloc else n'est pas exécuté et le traitement en dehors du bloc d'instructions if est exécuté. Ce sera le flux.

** Enfin, si toutes les expressions conditionnelles sont fausses. ** **

Exemple où toutes les expressions conditionnelles sont fausses


String color = "blue";
if (color == "red") {
  System.out.println("la couleur est rouge");
} else if (color == "yellow") {
  System.out.println("la couleur est jaune");
} else {
  System.out.println("la couleur n'est ni rouge ni jaune");
  System.out.println("La couleur est" + color);
}
System.out.println("sinon si exemple");

Le résultat de l'exécution est le suivant.

Résultat d'exécution


la couleur n'est ni rouge ni jaune
la couleur est bleue
sinon si exemple

Étant donné que le résultat des première et deuxième conditions et de l'expression conditionnelle est faux, le traitement à l'intérieur du bloc else est exécuté. Ensuite, le traitement en dehors du bloc d'instructions if est exécuté. Ce sera le flux.

Cela permet de diviser le traitement selon plusieurs jugements de condition.

Opérateur triangulaire

Un opérateur qui exécute une expression en fonction du résultat d'une expression conditionnelle.

syntaxe


Expression conditionnelle?Équation 1:Équation 2;

Si l'expression conditionnelle renvoie true, alors l'expression 1 est exécutée et si false, l'expression 2 est exécutée.

Par exemple, ** si l'expression conditionnelle est vraie. ** **

Exemple d'opérateur ternaire


String name = "yamada";
String str = "La longueur du nom est";
str += name.length() >= 4 ?  "4 ou plus" : "3 ou moins";
System.out.println(str);

Le résultat de l'exécution est le suivant.

Résultat d'exécution


La longueur du nom est de 4 ou plus

L'expression conditionnelle est name.length ()> = 4. Si vrai, «4 ou plus», et si faux, «3 ou moins» est combiné avec la chaîne de caractères stockée dans str.

Le même processus est décrit dans l'instruction if-else comme suit.

if-Dans le cas d'autre


String name = "yamada";
String str = "La longueur du nom est";
if (name.length() >= 4) {
  str += "4 ou plus";
} else {
  str += "3 ou moins";
}
System.out.println(str);

L'opérateur ternaire est plus facile à écrire que l'instruction if-else.

instruction switch

Le résultat de l'évaluation de l'expression est comparé à la constante et, s'ils correspondent, le processus est exécuté. Il s'agit d'une méthode pour effectuer un traitement multi-branches.

syntaxe


switch (formule) {
constante de cas 1:
Processus 1;
    break;
constante de cas 2:
Processus 2;
    break;
  default:
Processus 3;
}

Si le résultat de l'expression correspond à la constante 1, le processus 1 est exécuté et s'il correspond à la constante 2, le processus 2 est exécuté. S'il n'y a pas de correspondance, le traitement ci-dessous par défaut est exécuté. (La description de la valeur par défaut est facultative)

Exemple d'instruction Switch


String color = "blue";

switch (color) {
  case "red":
    System.out.println("la couleur est rouge");
    break;
  case "yellow":
    System.out.println("la couleur est jaune");
    break;
  case "blue":
    System.out.println("la couleur est bleue");
    break;
  default:
    System.out.println("La couleur est" + color);
    break;
}

Le résultat de l'exécution est le suivant.

Résultat d'exécution


la couleur est bleue

Le résultat de l'expression est la chaîne "blue", qui correspond à la troisième casse. Par conséquent, le traitement qu'il contient est exécuté.

Remarques sur les instructions switch

Type de données d'expression

La valeur qui peut être décrite dans l'expression de l'instruction switch doit être la valeur de l'un des types de données ** char, byte, short, int, sa classe wrapper, enum et String **.

Si un autre type est spécifié, une erreur de compilation se produira.

Erreur d'expression de l'instruction Switch


double d = 2.0;
switch (d) { // Cannot switch on a value of type double. Only convertible int values, strings or enum variables are permitted
  //réduction
}

Résultat de l'expression

Si le résultat de l'expression est ** null **, en supposant que le type de données de l'expression est respecté, une exception sera levée au moment de l'exécution même si la compilation réussit.

Exception de l'expression d'instruction switch


String ex = null;
switch (ex) {
  case "a":
    System.out.println("a");
    break;
  case "b":
    System.out.println("b");
    break;
  default:
    System.out.println("nothing");
    break;
}

Résultat d'exécution


Exception in thread "main" java.lang.NullPointerException
        at Condition.main(Condition.java:102)

Utiliser les opérateurs entre ()

Il n'y a pas de problème même si vous calculez entre ().

Ajout et

()Exemple de calcul dans


int a = 0;
switch (a + 1) {
  case 0:
    System.out.println("0");
    break;
  case 1:
    System.out.println("1");
    break;
  case 2:
    System.out.println("2");
    break;
}

Résultat d'exécution


1

Décrémenter etc.

()Exemple de calcul 2


int a = 0;
switch (--a) {
  case 0:
    System.out.println("0");
    break;
  case 1:
    System.out.println("1");
    break;
  default:
    System.out.println("Il n'y a pas de numéro correspondant");
    break;
}

Résultat d'exécution


Il n'y a pas de numéro correspondant

Cependant, déclarer une variable dans () entraînera une erreur de compilation.

()Déclaration de variable avec erreur


switch (int a = 0;) {
  case 0:
    System.out.println("0");
    break;
  case 1:
    System.out.println("1");
    break;
  case 2:
    System.out.println("2");
    break;
}

Valeur spécifiée en cas

(1) Si le type de données du résultat de l'expression et le type de données spécifié en cas ne correspondent pas, une erreur de compilation se produit.

Erreur de la valeur spécifiée en cas


int num = 10;
switch (num) {
  case "0": // Type mismatch: cannot convert from String to int
    System.out.println("0");
    break;
  case "1": // Type mismatch: cannot convert from String to int
    System.out.println("1");
    break;
  case "2": // Type mismatch: cannot convert from String to int
    System.out.println("2");
    break;
}

(2) S'il ne s'agit pas d'un littéral ou d'une constante, une erreur de compilation se produira.

Erreur 2 de la valeur spécifiée en cas


int num = 10;
int a = 1;
int b = 2;
switch (num) {
  case a: // case expressions must be constant expressions
    System.out.println("1");
    break;
  case b: // case expressions must be constant expressions
    System.out.println("2");
    break;
  default:
    System.out.println("nothing");
    break;
}

Dans ce cas, une erreur se produira car les variables a et b sont spécifiées dans le cas. Ajoutez le modificateur final pour en faire une constante ou spécifiez un littéral.

Correction d'erreur 2 ver de la valeur spécifiée en cas


int num = 10;
final int a = 1;

switch (num) {
  case a:
    System.out.println("1");
    break;
  case 2:
    System.out.println("2");
    break;
  default:
    System.out.println("nothing");
    break;
}

(3) Si null est spécifié, une erreur de compilation se produira.

Erreur 3 de la valeur spécifiée en cas


String name = "Tanaka";

switch (name) {
  case "Yamada":
    System.out.println("Yamada");
    break;
  case null: // case expressions must be constant expressions
    System.out.println("null");
    break;
}

④ Présence ou absence de déclaration break

Le mot ** break; ** est absent de l'instruction switch une fois que le processus a été exécuté. '' Si vous l'oubliez, vous le comparerez au cas suivant pour la première fois, alors soyez prudent.

Quand tu oublies de rompre


int num = 10;

switch (num) {
  case 0:
    System.out.println("0");
    break;
  case 10:
    System.out.println("10");
    // break;J'ai oublié d'écrire
  default:
    System.out.println("nothing");
    break;
}

Après l'exécution du traitement dans le cas 10, le traitement par défaut est également exécuté car il n'y a pas d'instruction break.

Résultat d'exécution


10
nothing

Veillez à ne pas obtenir un résultat d'exécution involontaire.

À la fin

J'ai appris à brancher le processus selon les conditions comme la procédure de processus du programme. Compte tenu de la lisibilité du code source, je souhaite l'utiliser correctement en fonction de la situation.

Site de référence

** Branche de traitement ** ** Instruction de commutation Java **

Recommended Posts

[Introduction à Java] Branchement conditionnel (instruction if, instruction if-else, instruction else if, opérateur ternaire, instruction switch)
Étude de Java # 4 (branchement conditionnel / instruction if)
[Java] Le branchement conditionnel est une instruction if, mais il existe également un opérateur conditionnel.
Branchement conditionnel Java: comment créer et étudier des instructions de commutation
Je souhaite simplifier l'instruction if-else de la branche conditionnelle en Java
Java, instruction if / instruction switch à partir du débutant
[Java] "Paramétrage" utilisant Enum plutôt que le branchement conditionnel par instruction if -Strategy Enum
Branche conditionnelle de Ruby. if, opérateur conditionnel (opérateur ternaire), sauf si, cas
[Java] Introduction à Java
Introduction à Java
Branchement conditionnel du résultat de l'instruction SQL pour n'en rechercher qu'une seule en Java
Instruction de commutation Java
10 Correspond à l'instruction if
Introduction à la commande java
Revue Java ③ (syntaxe de contrôle [if / switch / while / for], expression conditionnelle)
Instructions Java if et switch
[Java] Introduction à l'expression lambda
[Java] Introduction à l'API Stream
java (branchement conditionnel et répétition)
[Introduction aux jeux Janken (comme)] Java