Enumeration en java

cs_limalima Messages postés 124 Date d'inscription dimanche 31 août 2008 Statut Membre Dernière intervention 16 décembre 2010 - 27 oct. 2010 à 12:19
cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 - 27 oct. 2010 à 14:15
Bonjour,
J'ai un code sur les enumeration que je n'ai pas très bien saisi
public class Test {
public enum Dogs { collie, harrier,toto };
public static void main(String [] args) {
Dogs myDog=Dogs.harrier;

switch (myDog) {
case collie:
System.out.print("collie ");
case harrier:
System.out.print("harrier ");
case toto:
System.out.print("toto ");
}
}
}


Le résultat de l'exécution est: harrier toto

mes questions:
la ligne: Dogs myDog=Dogs.harrier;:cela veut dire que myDog est initialisé à harrier
et donc le switch doit donner System.out.print("harrier ");
et pourquoi il m'affiche le reste de toute l'enumeration et à partir de harrier?

Merci de m'éclairer sur le sujet

5 réponses

cs_Julien39 Messages postés 6414 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 29 juillet 2020 371
27 oct. 2010 à 12:38
Essaye de mettre un break; à la fin de test case, ça devrait régler le problème
0
cs_limalima Messages postés 124 Date d'inscription dimanche 31 août 2008 Statut Membre Dernière intervention 16 décembre 2010
27 oct. 2010 à 12:53
merci,
mais normalement, sans mettre de breack, étant donné que myDog est initialisé à
"harrier", et non pas à "toto " qui ne doit pas donc être affché
0
cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 130
27 oct. 2010 à 13:23
Salut,

Ce n'est pas un problème de l'énumération mais de la non-compréhension de l'utilisation de l'instruction switch :

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


Ca va t'afficher : 12

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


Ca va t'afficher : 1

Pourquoi ? Tout simplement que en Java, comme en C, et d'autres langages, il faut indiquer la fin de l'instruction case par un break, sinon java continue au case suivant, ce qui permet de faire plusieurs case qui font la même chose :
int i = 1;
switch(i) {
case 0:
case 1:
case 2:
System.out.println("premier cas");
break;
case 3:
case 4:
case 5:
System.out.println("deuxième cas");
break;
}
}

______________________________________

AVANT de poster votre message, veuillez lire, comprendre, et appliquer notre réglement
0
cs_limalima Messages postés 124 Date d'inscription dimanche 31 août 2008 Statut Membre Dernière intervention 16 décembre 2010
27 oct. 2010 à 14:00
Ok,
moi j'avais compris que, comme la variable i es etant fixée à 1
et n'est pas incrémentée automatiquement(ce qui me semble etre le cas ici)
au fait moi je comrends l'utilisation du switch par:
...
case 2: System.out.println("2");
...
cela veut dire pour moi:
si i=2 alors faire...

et etant donné que i est different de 2, alors il n'affche pas la valeur 2

c'est comme ça que j'utilise le switch
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 130
27 oct. 2010 à 14:15
Salut,

C'est cà, mais pas tout à fait :

swith(i) veut dire : sélectionne un cas selon la valeur de i, donc si i = 1, alors java exécute le case 1, ca c'est ok.

Par contre :

case 1:
System.out.println("1");
case 2:
System.out.println("2");

Ca veut dire : dans le case 1, afficher "1", puis continuer dans le case 2.

Alors que :
case 1:
System.out.println("1");
break;
case 2:
System.out.println("2");

Ca veut dire : dans le case 1, afficher "1" puis quitter le switch.

Ce qui permet de faire des choses du genre :

case 1:
ajouterUtilisateur(user);
case 2:
identifierUtilisateur(user);
case 3:
afficherMenuUtilisateur(user);

Dans cet exemple, selon le case, on ajoute puis identifie puis affiche le menu du joueur, ou bien on ne fait qu'identifier et afficher son menu, ou alors on ne fait qu'afficher le menu, ca évite de dupliquer du code.

______________________________________

AVANT de poster votre message, veuillez lire, comprendre, et appliquer notre réglement
0
Rejoignez-nous