Conditions
If/else if/ else
int hour = 13;
if (hour < 12)
{
System.out.println("Bonjour !");
}
else if (hour < 18)
{
System.out.println("Bon après-midi !");
}
else
{
System.out.println("Bonsoir !");
}Opérateur conditionnel
// égalité
==
// différent
!=
// superieur
>
// supérieur ou égale
>=
// inférieur
<
// inférieur ou égal
<=equals(): Comparaison de chaîne
String password = console.nextLine();
if (password.equals("qwerty")) // on appelle la méthode equals() et on lui passe la deuxième chaîne
{
System.out.println("Vous êtes connecté !");
}boolean
Peux prendre une valeur true ou false.
int age = 20;
boolean isAdult = age >= 18; // true (20 est supérieur ou égal à 18)
boolean isTeenager = age >= 13 && age < 18; // false (20 n'est pas inférieur à 18)
boolean isEven = age % 2 == 0; // true (20 est divisible par 2)Opérateur logique
&&: ET||: OU!: NOT -> permet d’inverser
int age = 16;
boolean hasTicket = true;
boolean canAttend = age >= 14 && hasTicket; // true (16 est supérieur à 14 ET un billet est présent)
boolean isAdmin = false;
boolean isModerator = true;
boolean canEdit = isAdmin || isModerator; // true (on peut modifier si au moins l'un des deux est true)
boolean isWeekend = false;
boolean shouldGoToWork = !isWeekend; // true (si ce n'est pas le week-end, on travaille)
int age = 17;
boolean hasTicket = false;
boolean isVip = true;
boolean canGo = (age >= 18 && hasTicket) || isVip; // true, parce que isVip = trueOpérateur ternaire
Si la condition est vraie, l’expression 1 est évalué, sinon c’est la deuxiéme. On peut affecter son résultat a une variable.
Les deux valeurs doivent être du même type.
int age = 25;
int money = age > 30 ? 100 : 50; // 100
// calcul la valeur absolu
int number = -5;
int abs = (number >= 0) ? number : -number;
System.out.println(abs); // 5Switch
Entre chaque case, on utilise le break.
Le switch prends en charge les types primitifs (byte, short, char, int), les énumérations enum et les String.
import java.util.Scanner;
public class CommandMenu
{
public static void main(String[] args)
{
Scanner console = new Scanner(System.in);
System.out.println("Saisissez une commande (start, stop, pause):");
String command = console.nextLine(); // récupération de la saisie
// on passe la commande dans le switch
switch (command)
{
case "start":
System.out.println("Démarrage du programme!");
break;
case "stop":
System.out.println("Arrêt du programme.");
break;
case "pause":
System.out.println("Pause.");
break;
default:
System.out.println("Commande inconnue.");
break;
}
}
}Pour regrouper des cases :
int month = 1;
switch (month)
{
case 12:
case 1:
case 2:
System.out.println("Hiver");
break;
case 3:
case 4:
case 5:
System.out.println("Printemps");
break;
case 6:
case 7:
case 8:
System.out.println("Été");
break;
case 9:
case 10:
case 11:
System.out.println("Automne");
break;
default:
System.out.println("Mois inconnu");
break;
}Switch moderne
Avec Java 14+, la syntaxe de Switch est devenue plus moderne.
Avec un enum, le compilateur vient vérifier si tutes les valeurs sont traitée. Le compilateur n’autorisera pas la construction du projet sans default.
La logique par défaut est également inverse. Par défaut, il n’y a pas de risque de passer au casesuivant.
DayOfWeek day = DayOfWeek.MONDAY;
// switch est devenue une expression qui retourne une valeur
String message = switch (day)
{
case MONDAY, FRIDAY, SUNDAY -> "Semaine courte ou jour de repos !";
case TUESDAY -> "Le mardi — une journée difficile.";
case WEDNESDAY, THURSDAY -> "Milieu de semaine !";
case SATURDAY -> "Youpi, samedi !";
// default est obligatoire si toutes les possibilités ne sont pas couvertes
default -> "Jour plutôt étrange...";
};
System.out.println(message);
// NOMBRE =====================================
int code = 404;
String result = switch (code)
{
case 200 -> "OK";
case 400, 404 -> "Erreur côté client";
case 500 -> "Erreur serveur";
default -> "Code inconnu";
};
System.out.println(result);
// String =====================================
String command = "start";
String status = switch (command)
{
case "start" -> "Démarrage !";
case "stop" -> "Arrêt !";
case "pause" -> "Pause...";
default -> "Commande inconnue";
};
System.out.println(status);->: le résultat retourné par le case- plusieurs case peuvent etre regroupée par des virgules
- il n’y a plus de break
- la variable
messageest directement affecté.
yield
On souahite parfois exécuter plusieurs actions sur un même case, par exemple un calcul complexe ou journalier. Pour cela, on utilise un bloc { ... } et le mot clé yield
int n = 7;
String parity = switch (n % 2)
{
case 0 -> "Pair";
case 1 ->
{
System.out.println("Nombre impair détecté : " + n);
yield "Impair";
}
default -> "Quelque chose d'étrange";
};
System.out.println(parity);Dans ce bloc, il doit impérativement avoir un yield qui retourne une valeur pour ce case.
Utilisation avec enum et chaine
On as un enum
enum DayOfWeek
{
MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY
}On vient l’utiliser dans un nouveau switch
// on viens utiliser l'enum
DayOfWeek today = DayOfWeek.WEDNESDAY;
// on switch sur l'enum
String mood = switch (today)
{
case MONDAY -> "Difficile de se lever...";
case FRIDAY -> "Le week-end approche !";
case SATURDAY, SUNDAY -> "Youpi, repos !";
default -> "Jour ouvré.";
};
System.out.println(mood);