IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage Java Discussion :

plusieurs variable dans une 'case'


Sujet :

Langage Java

  1. #1
    Membre à l'essai
    Inscrit en
    Novembre 2006
    Messages
    41
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 41
    Points : 17
    Points
    17
    Par défaut plusieurs variable dans une 'case'
    bonjour,

    voila j'ai un petit probleme je voudrais savoir si dans switch et plus particulierement dans case je peut metre plusieurs valeur?!

    ex:
    switch
    case valeur1 valeur5 valeur8
    instructions
    break
    sachant que en fait mes valeurs representeraient les numero des mois.

  2. #2
    Membre régulier
    Homme Profil pro
    Inscrit en
    Octobre 2006
    Messages
    124
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 124
    Points : 120
    Points
    120
    Par défaut
    non, tu ne peux pas, mais tu peux faire comme ci-dessous :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    switch(int mois) {
      case 2 :
      case 3 :
        instructions...
        break;
      case 1 :
      case 5 :
      case 8 :
        instructions...
        break;
      default :
    }

  3. #3
    Membre actif
    Profil pro
    Inscrit en
    Février 2006
    Messages
    238
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 238
    Points : 267
    Points
    267
    Par défaut
    Bien sur tu peux faire de cette facon :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    switch (variable) {
         case 1:  case 2:  case 3:
               // instructions...
               break; // si tu ne spécifie pas de break pour un case tous les case  suivant sont aussi exécutés (c'est grâce à cela qu'on peut faire ce que tu cherche).
     
          default:  // bla...bla...bla
    }
    Voilà.

    edit: grillé...

  4. #4
    Membre à l'essai
    Inscrit en
    Novembre 2006
    Messages
    41
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 41
    Points : 17
    Points
    17
    Par défaut
    ah d'accord.
    Et donc la toutes les valeurs mis en desous les unes des autres reprendront l'instruction?

  5. #5
    Modérateur
    Avatar de OButterlin
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    7 313
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 313
    Points : 9 529
    Points
    9 529
    Billets dans le blog
    1
    Par défaut
    pour plusieurs valeurs, la forme est la suivante :

    switch (variable)
    {
    case 1 :
    case 2 :
    case 3 :
    traitement...
    break;
    default :
    traitement dans les autres cas...
    break;
    }

    A+

  6. #6
    Membre actif
    Profil pro
    Inscrit en
    Février 2006
    Messages
    238
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 238
    Points : 267
    Points
    267
    Par défaut
    Oui dans l'exemple de bigben, si ton mois vaut 2 ou 3 alors le premier bloc d'instructions est exécuté puis on sort du switch, si il vaut 1 5 ou 8 alors c'est le second bloc.

  7. #7
    Membre à l'essai
    Inscrit en
    Novembre 2006
    Messages
    41
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 41
    Points : 17
    Points
    17
    Par défaut
    d'accord. Merci beaucoup. C'etait pour etre vraiment sur.

  8. #8
    Membre régulier
    Homme Profil pro
    Inscrit en
    Octobre 2006
    Messages
    124
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 124
    Points : 120
    Points
    120
    Par défaut
    oui, la fonction switch va rechercher le bon case (si elle ne le trouve pas, elle va executer le bloc d'instruction default) et ensuite, exécutera toutes les instructions suivant ce case jusqu'au break (tant qu'il n'y a pas de break, on execute l'instruction suivante).

  9. #9
    Membre confirmé Avatar de benratti
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    471
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mai 2004
    Messages : 471
    Points : 649
    Points
    649
    Par défaut
    C'est possible, il faut pour cela connaitre un peu le fonctionnement du switch dans les langages de programmation.

    L'instruction switch sert à executer un bout de code en rentrant à différent endroit en fonction d'une valeur.

    Généralement, on s'en sert lorsque l'on a differents cas à traiter pour eviter à ecrire plein de if ... else if ... else ... imbriqué.
    Voila ce que tu écris dans ces cas la
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    switch ( maVariable )
    {
       case 1 : ... ; break ;
       case 2 : ... ; break ;
       ...
     
       default : ...
    }
    En regardant la structure du code que je viens de te donner, tu te rends compte qu'il y a des break à chaque fin de cas.

    Mais que ce passe t'il dans le cas ou on retire le break... Pour cela, il faut se rappeler de ce que fait l'instruction break. Elle fait sortir du bloc, donc dans ce cas la, le break fait sortir du switch. S'il y a un break, c'est qu'il y sert forcement à quelque chose. A quoi sert il ? Si on le retire, le code suivant va donc être executé. Le code suivant correspond en fait au case suivant... il est donc executé.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    switch ( maVariable )
    {
       case 1 : ... ; 
       case 2 : ... ;
       ...
     
       default : ... 
    }
    Après ca, on comprends plus pourquoi je parlais de point d'entrée tout à l'heure.

    Donc je te laisse deduire ce que tu dois faire dans ton cas.

    [EDIT] je crois qu'en voulant trop exliquer dans le detail le fonctionnement du switch, je me suis fait grillé sur ce post [/EDIT]

  10. #10
    Membre à l'essai
    Inscrit en
    Novembre 2006
    Messages
    41
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 41
    Points : 17
    Points
    17
    Par défaut
    est on obligé de metre default?!

    ET puis il me refuse les ; apres break lors de la compilation

  11. #11
    Modérateur
    Avatar de OButterlin
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    7 313
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 313
    Points : 9 529
    Points
    9 529
    Billets dans le blog
    1
    Par défaut
    'default' est optionnel
    Pour les ';' en fin de ligne, ce n'est pas un problème java en tout cas

  12. #12
    Membre confirmé Avatar de Claythest
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    558
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 558
    Points : 554
    Points
    554
    Par défaut
    Citation Envoyé par vanilla94
    est on obligé de metre default?!
    non

    Citation Envoyé par vanilla94
    ET puis il me refuse les ; apres break lors de la compilation
    Montre ton code

  13. #13
    Membre à l'essai
    Inscrit en
    Novembre 2006
    Messages
    41
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 41
    Points : 17
    Points
    17
    Par défaut
    j'ai peut etre encore fait des fautes betes!


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    import static java.lang.System.out;
    import java.util.Scanner;
    
    public class Joursuivant
    {
    	public static int div4;
    	public static int div100;
    	public static int div400;
    	
    	public static void main(String args[])
    	{
    		Scanner myScanner= new Scanner(System.in);
    		out.println("veuilles entrer la date d'aujourd'hui(aaaa/mm/jj).\n");
    		
    		int a= myScanner.nextInt();
    		int m= myScanner.nextInt();
    		int j= myScanner.nextInt();
    		
    		switch (m)
    		{
    			case 01:
    			case 03:
    			case 05:
    			case 07:
    			case 08:
    			case 10:
    				if (j<=30)
    				{
    					j= j+1;
    				}
    				if (j=31)
    				{
    					j=01;
    					m= m+1;
    				}
    			break;
    				
    			case 04:
    			case 06:
    			case 09:
    			case 11:
    				if (j<=29)
    				{
    					j= j+1;
    				}
    				if (j=30)
    				{
    					j=01;
    					m= m+1;
    				}
    			break;
    				
    			case 02:
    				if (j<=27)
    				{	
    					j= j+1;
    				}
    				
    				if (j>27)
    				{
    					div4= a-(a/4);
    					
    					if (div4=0)
    					{
    						div100= a-(a/100);
    						
    						if (div100=0)
    						{
    							div400= a-(a/400);
    							
    							if(div400=0);
    							{
    								j=01;
    								m= m+1;
    							}
    							else
    							{
    								j=01;
    								m= m+1;
    							}
    						}
    						else
    						{
    							j=01;
    							m= m+1;
    						}
    					}
    					else
    						{
    							j=01;
    							m= m+1;
    						}
    				}
    			break;
    			
    			case 12:
    				if (j<=30)
    				{
    					j= j+1;
    				}
    				if (j=31)
    				{
    					j=01;
    					m= m+1;
    					a= a+1;
    				}
    			break;
    			
    			default:
    				out.println("votre date n'existe pas!!");
    		}
    		out.println();
    		out.println("demain sous seront le : "+j+"/"+m+"/"+a);
    	}
    }
    maintenant quand je compile j'ai trois erreurs:
    case 08 --> integer number too large:08
    case 09--> integer number too large:09

    et ala ligne 76 il me dit 'else' without 'if'

  14. #14
    Membre expérimenté Avatar de yann2
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2004
    Messages
    897
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2004
    Messages : 897
    Points : 1 635
    Points
    1 635
    Par défaut
    Salut

    En Java, si tu écris un nombre de cette façon 0n, cela veut dire que le nombre n est esprimée en base 8 et, en base 8, les chiffres 8 et 9 n'existent pas ....

    Pour ton else, c'est parce que tu as mis un ';' après la parenthèse fermante de la condition de ton if

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
     
    import static java.lang.System.out;
    import java.util.Scanner;
     
    public class Joursuivant
    {
    	public static int div4;
    	public static int div100;
    	public static int div400;
     
    	public static void main(String args[])
    	{
    		Scanner myScanner= new Scanner(System.in);
    		out.println("veuilles entrer la date d'aujourd'hui(aaaa/mm/jj).\n");
     
    		int a= myScanner.nextInt();
    		int m= myScanner.nextInt();
    		int j= myScanner.nextInt();
     
    		switch (m)
    		{
    			case 1:
    			case 3:
    			case 5:
    			case 7:
    			case 8:
    			case 10:
    				if (j<=30)
    				{
    					j= j+1;
    				}
    				if (j=31)
    				{
    					j=1;
    					m= m+1;
    				}
    			break;
     
    			case 4:
    			case 6:
    			case 9:
    			case 11:
    				if (j<=29)
    				{
    					j= j+1;
    				}
    				if (j=30)
    				{
    					j=1;
    					m= m+1;
    				}
    			break;
     
    			case 2:
    				if (j<=27)
    				{	
    					j= j+1;
    				}
     
    				if (j>27)
    				{
    					div4= a-(a/4);
     
    					if (div4=0)
    					{
    						div100= a-(a/100);
     
    						if (div100=0)
    						{
    							div400= a-(a/400);
     
    							if(div400=0)
    							{
    								j=1;
    								m= m+1;
    							}
    							else
    							{
    								j=1;
    								m= m+1;
    							}
    						}
    						else
    						{
    							j=1;
    							m= m+1;
    						}
    					}
    					else
    						{
    							j=1;
    							m= m+1;
    						}
    				}
    			break;
     
    			case 12:
    				if (j<=30)
    				{
    					j= j+1;
    				}
    				if (j=31)
    				{
    					j=1;
    					m= m+1;
    					a= a+1;
    				}
    			break;
     
    			default:
    				out.println("votre date n'existe pas!!");
    		}
    		out.println();
    		out.println("demain sous seront le : "+j+"/"+m+"/"+a);
    	}
    }
    voili, voilou

  15. #15
    Expert éminent sénior
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Points : 23 190
    Points
    23 190
    Billets dans le blog
    1
    Par défaut
    Salut,

    Citation Envoyé par vanilla94
    maintenant quand je compile j'ai trois erreurs:
    case 08 --> integer number too large:08
    case 09--> integer number too large:09
    Selon les specs, lorsqu'un nombre commence par 0 cela signifie qu'on utilise la notation octal. Et cette dernière n'utilise que les chiffres 0 à 7...
    Enlève les 0 en début de chiffre !!!




    Citation Envoyé par vanilla94
    et ala ligne 76 il me dit 'else' without 'if'
    Sans commentaire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    if(div400=0);
    {
    	j=01;
    	m= m+1;
    }
    else
    {
    	j=01;
    	m= m+1;
    }

    Enfin pourquoi réinventer la roue ? Pourquoi ne pas utiliser la classe SimpleDateFormat ???

    a++

  16. #16
    Membre à l'essai
    Inscrit en
    Novembre 2006
    Messages
    41
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 41
    Points : 17
    Points
    17
    Par défaut
    Citation Envoyé par adiGuba
    Enfin pourquoi réinventer la roue ? Pourquoi ne pas utiliser la classe SimpleDateFormat ???
    tout simplement parce que je ne l'ai pas encore appris!

    Sinon pour le point virgule je ne l'avais meme pas vu pourtout je regardais mais bon.

    Mais je demande a l'utilisateur de taper le mois sous la forme mm.

  17. #17
    Membre éprouvé
    Profil pro
    Architecte technique
    Inscrit en
    Mars 2002
    Messages
    966
    Détails du profil
    Informations personnelles :
    Âge : 51
    Localisation : France

    Informations professionnelles :
    Activité : Architecte technique

    Informations forums :
    Inscription : Mars 2002
    Messages : 966
    Points : 1 085
    Points
    1 085
    Par défaut
    Citation Envoyé par adiGuba
    Enfin pourquoi réinventer la roue ? Pourquoi ne pas utiliser la classe SimpleDateFormat ???
    Parceque c'est toujours mieux de réinventer un roue efficace et ronde, par un système de roues qui frotte au sol, qui est carré et qui n'avance pas...

    Ceci dit il y a un truc qui s'appelle la Javadoc qui peut aider les newbies...

    Et secundo un switch avec 200 case pour moi c'est tout laid et pas maintenable, mais bon chacun voit midi à sa porte. Alors de deux choses l'une, soit c'est indispensable et là je te l'accorde ou comme dans la majorité des cas tu peux le remplacer par une autre structure de contrôle...

    A+

  18. #18
    Membre expérimenté Avatar de yann2
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2004
    Messages
    897
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2004
    Messages : 897
    Points : 1 635
    Points
    1 635
    Par défaut
    Rebonjour

    Pour l'histoire de la roue...

    Ben c'est peut être juste un exo à but pédagogique. Moi j'ai commencé Java en implémentant des tris de tableau pourtant ça existait déjà. On a tous été débutant

    [edit]
    Afin de t'éviter des heures de débug :
    n'est pas une expression booléenne...
    [/edit]

  19. #19
    Membre à l'essai
    Inscrit en
    Novembre 2006
    Messages
    41
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 41
    Points : 17
    Points
    17
    Par défaut
    Citation Envoyé par yann2
    [edit]
    Afin de t'éviter des heures de débug :
    n'est pas une expression booléenne...
    [/edit]
    oui merci je le sais mais a chaque foi j'oublie! Mais j'ai corrigé.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Afficher plusieurs variables dans une seule
    Par xunil2003 dans le forum Langage
    Réponses: 3
    Dernier message: 28/11/2009, 16h41
  2. Inserez une variable dans une case
    Par Tinien dans le forum Excel
    Réponses: 4
    Dernier message: 01/09/2008, 13h40
  3. Réponses: 4
    Dernier message: 06/03/2008, 11h57
  4. Mettre plusieurs variables dans une seule
    Par fixbraun dans le forum Langage
    Réponses: 5
    Dernier message: 23/03/2007, 21h34
  5. [SQL] calcul de plusieurs variables dans une table
    Par guillaumeIOB dans le forum PHP & Base de données
    Réponses: 7
    Dernier message: 12/03/2006, 21h53

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo