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

Java Discussion :

Problème de vérification de chaîne de type entier


Sujet :

Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de dedalios
    Homme Profil pro
    concepteur d'application
    Inscrit en
    Février 2008
    Messages
    495
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : concepteur d'application
    Secteur : Santé

    Informations forums :
    Inscription : Février 2008
    Messages : 495
    Par défaut Problème de vérification de chaîne de type entier
    Ce code est supposé doit permettre à terme de vérifier que nous sommes devant un n° de Secu
    La vérification de la clé n'y est pas encore codée.


    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
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    212
    213
    214
    215
    216
    217
    218
    219
    220
    221
    222
    223
    224
    225
    226
    227
    228
    229
    230
    231
    232
    233
    234
    235
    236
    237
    238
    239
    240
    241
    242
    243
    244
    245
    246
    247
    248
    249
    250
    251
    252
    253
    254
    255
    256
    257
    258
    259
    260
    261
    262
    263
    264
    265
    266
    267
    268
    269
    270
    271
    272
    273
    274
    275
    276
    package autressources2;
    // numsecsoc.java
     
    /* 
     Voici le programme source numsecsoc.java écrit en langage Java qui correspond à
    l’algorithme du numéro de Sécurité sociale. Aucun caractère accentué n’est utilisé
    dans le nom des variables.
    */
     
     
    class Num_Sec_Soc {
    	private String ch;
     
    	public String getCh() {
    		return ch;
    	}
     
    	public void setCh(String ch) {
    		this.ch = ch;
    	}
     
    	public void Affiche() {
    		this.interprete_sexe();
    		this.interprete_annee();
    		this.interprete_mois();
    		this.interprete_departement();
    		this.interprete_commune();
    		this.interprete_ordre();
     
    	}
     
    	@Override
    	public String toString() {
    		String sexe = ch.substring(0, 1);
    		String annee = ch.substring(1, 3);
    		String mois = ch.substring(3, 5);
    		String departement = ch.substring(5, 7);
    		String commune = ch.substring(7, 10);
    		String cle = ch.substring(10, 12);
    		return "Num_Sec_Soc :" + sexe + "." + annee + "." + mois + "." + departement + "." + commune + "." + cle;
    	}
     
     
     
    	public boolean verifier_sexe() {
    		/*
    		 * référence wikipedia sexe : 1 pour les hommes, 2 pour les femmes, 3 ou
    		 * 7 pour les personnes étrangères de sexe masculin en cours
    		 * d'immatriculation en France , 4 ou 8 pour les personnes étrangères de
    		 * sexe féminin en cours d'immatriculation en France
    		 */
     
    		if (TestErreur(ch.substring(0, 1))) {
    			int sexe = Integer.parseInt(ch.substring(0, 1));
     
    			switch (sexe) {
    			case 1:
    				return true;
    			case 2:
    				return true;
    			case 3:
    				return true;
    			case 4:
    				return true;
    			case 7:
    				return true;
    			case 8:
    				return true;
    			default:
    				return false;
    			}
    		} else {
    			return false;
    		}
    	}
     
    	public void interprete_sexe() {
     
    		/*
    		 * référence wikipedia sexe : 1 pour les hommes, 2 pour les femmes, 3 ou
    		 * 7 pour les personnes étrangères de sexe masculin en cours
    		 * d'immatriculation en France 4 ou 8 pour les personnes étrangères de
    		 * sexe féminin en cours d'immatriculation en France
    		 */
    		int sexe = Integer.parseInt(ch.substring(0, 1));
    		if (verifier_sexe()) {
    			switch (sexe) {
    			case 1:
    				System.out.println("Bonjour Monsieur");
    				break;
    			case 2:
    				System.out.println("Bonjour Madame");
    				break;
    			case 3:
    				System.out.println("Bonjour Monsieur");
    				break;
    			case 4:
    				System.out.println("Bonjour Madame");
    				break;
    			case 7:
    				System.out.println("Bonjour Monsieur");
    				break;
    			case 8:
    				System.out.println("Bonjour Madame");
    				break;
    			    } 
    			}
    		else {
    			System.out.printf("Code sexe %d incorrecte \n", sexe);
    		}
     
    	}
     
    	public boolean verifier_annee() {
    		String  annee_c =  ch.substring(1, 3);
    		if(TestErreur(annee_c)) {
    			return true;
    		}
    		return false;
    	}
     
    	public void interprete_annee() {
    		String  annee_c =  ch.substring(1, 3);
    		if(TestErreur(annee_c)) {
    			int annee = Integer.parseInt(ch.substring(1, 3)) + 1900;		
    			System.out.println("Vous êtes né en : " + annee);	
    		}
     
    	}
     
     
     
    	public boolean verifier_mois() {
    		/* de 01 (janvier) à 12 (décembre) ou 62 ou 63 pour un mois non connu */
    		int mois = Integer.parseInt(ch.substring(3, 5));
    		if(mois >=1 || mois >=12 || mois == 62  || mois == 63) {
    			return true;
    		} else {
    			return false;
    		} 
     
    	}
     
    	public void interprete_mois() {
    		/*
    		 * de 01 (janvier) à 12 (décembre) ou 62 ou 63 pour un mois non connu
    		 * 
    		 */
    		int mois = Integer.parseInt(ch.substring(3, 5));
    		String Nom_mois = new String("");
     
    		if(this.verifier_mois()) {
    		switch (mois) {
    		case 1:
    			Nom_mois = "Janvier";
    			System.out.println("Au mois de : " + Nom_mois);
    			break;
    		case 2:
    			Nom_mois = "Février";
    			System.out.println("Au mois de : " + Nom_mois);
    			break;
    		case 3:
    			Nom_mois = "Mars";
    			System.out.println("Au mois de : " + Nom_mois);
    			break;
    		case 4:
    			Nom_mois = "Avril";
    			System.out.println("Au mois de : " + Nom_mois);
    			break;
    		case 5:
    			Nom_mois = "Mai";
    			System.out.println("Au mois de : " + Nom_mois);
    			break;
    		case 6:
    			Nom_mois = "Juin";
    			System.out.println("Au mois de : " + Nom_mois);
    			break;
    		case 7:
    			Nom_mois = "Juillet";
    			System.out.println("Au mois de : " + Nom_mois);
    			break;
    		case 8:
    			Nom_mois = "Août";
    			System.out.println("Au mois de : " + Nom_mois);
    			break;
    		case 9:
    			Nom_mois = "Septembre";
    			System.out.println("Au mois de : " + Nom_mois);
    			break;
    		case 10:
    			Nom_mois = "Octobre";
    			System.out.println("Au mois de : " + Nom_mois);
    			break;
    		case 11:
    			Nom_mois = "Novembre";
    			System.out.println("Au mois de : " + Nom_mois);
    			break;
    		case 12:
    			Nom_mois = "Décembre";
    			System.out.println("Au mois de : " + Nom_mois);
    			break;
    		case 62:
    			System.out.println("Référence de mois inconnu pour personne d'origine étrangère");
    			break;
    		case 63:
    			System.out.println("Référence de mois inconnu pour personne d'origine étrangère");
    			break;
    		}
    		} else {
    			System.out.println("Erreur de code mois");
    		}
    	}
     
    	private  boolean TestErreur(String cc ) {
    		char[] s = cc.toCharArray();
    		boolean testerreurfrappe = true;
    		for (int i = 0; i < s.length; i++) {
    			if (!Character.isDigit(s[i])) {
    				testerreurfrappe = false;
    			}
    		}
    		return testerreurfrappe;
    	} 
     
    	public boolean verifier_departement() {
    		String departement = ch.substring(5, 7);
    		int numdep;
    		//de 01 à 19 ou 21 à 95 ou 2A ou 2B, 96 à 99 pour des naissances à l'étrange
     
    		switch (departement) {
    		case "2A" :
    			departement ="20";
    		case "2B" :
    			departement ="20";
    			}	
    		return false;
    	}
    	public void interprete_departement() {
    		// aucun département ne comporte plus de 999 communes
    		//de 01 à 19 ou 21 à 95 ou 2A ou 2B, 96 à 99 pour des naissances à l'étrange
     
    		int departement = Integer.parseInt(ch.substring(5, 7));
    		System.out.println("Dans le département : " + departement);
    	}
     
     
    	public boolean verifier_commune() {
    		if (TestErreur( ch.substring(7, 10))) {
    			return true;
    		}
    		return false;
    	}
     
    	public void interprete_commune() {
    		String commune = ch.substring(7, 10);
    		if (TestErreur(commune)) {
    			System.out.println("Dans la commune : " + commune);
    		} else{
     
    		}
    	}
     
    	public void interprete_ordre() {
     
    		int ordre = Integer.parseInt(ch.substring(10, 12));
    		System.out.println("Avec le numéro d’ordre : " + ordre);
    	}
    	public void interprete_cle() {
    		/*
    		 * clé de contrôle = complément à 97 du nombre 
    		 * formé par les 13 premiers chiffres du NIR modulo 97 F
    		 */
    		int ordre = Integer.parseInt(ch.substring(13, 15));
    		System.out.println("Avec le numéro d’ordre : " + ordre);
    	}
    }

    Le lanceur
    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
     
    package autressources2;
    import java.io.*;
     
    public class Start {
    	// programme principal
    	public static void main(String[] args) {
    		// TODO Auto-generated method stub
    		 Num_Sec_Soc Numero = new Num_Sec_Soc() ;
    		 String ch= Saisie.lire_String("Entrez votre numéro de Sécurité sociale : ");
    		 Numero.setCh(ch);
    		 System.out.println(Numero);
     	     Numero.interprete_sexe();
    		 Numero.interprete_annee();
    		 Numero.interprete_mois();
    		 Numero.interprete_departement();
    		 Numero.interprete_commune();
    		 Numero.interprete_ordre();
    		 Numero.interprete_cle();
     
     
    	}
     
    }
    voici la saisie d'un code incorrecte : but vérifier que les tests de validation fonctionne
    Num_Sec_Soc :a.15.65.46.545.65
    le code erreur d'éclipse
    Exception in thread "main" java.lang.NumberFormatException: For input string: "a"
    at java.lang.NumberFormatException.forInputString(Unknown Source)
    at java.lang.Integer.parseInt(Unknown Source)
    at java.lang.Integer.parseInt(Unknown Source)
    at autressources2.Num_Sec_Soc.interprete_sexe(numsecsoc.java:85)


    Je cherche ou est l'erreur.
    voic un autre test le N° de sécu pourrait correspondre
    Entrez votre numéro de Sécurité sociale : 215890544565415
    Num_Sec_Soc :2.15.89.05.445.65
    Bonjour Madame
    Vous êtes né en : 1915
    Dans le département : 5
    Dans la commune : 445
    Avec le numéro d’ordre : 65
    Avec le numéro d’ordre : 15

  2. #2
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Billets dans le blog
    2
    Par défaut
    Salut,

    L'endroit où se trouve l'erreur est indiquée dans la stacktrace :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    autressources2.Num_Sec_Soc.interprete_sexe(numsecsoc.java:85)
    Ligne 85, dans le fichier numsecsoc.java, classe Num_Sec_Soc, méthode interprete_sexe.

    Soit la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    int sexe = Integer.parseInt(ch.substring(0, 1));
    forcément si tu saisis : a15654654565, le premier caractère est a et le transformer en int est impossible puisque c'est une lettre. D'où exception.

    Alors, oui, tu fais un test pour tester si la saisie ne contient pas que des chiffres avec TestErreur, mais la méthode, appelée dans verifier_sexe, est appelée après la ligne 85 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    		int sexe = Integer.parseInt(ch.substring(0, 1));
    		if (verifier_sexe()) {
    Donc ça ne sert à rien. C'est avant qu'il faut tester.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    if (verifier_sexe()) {
        int sexe = Integer.parseInt(ch.substring(0, 1));
        /* ... traitement */
    Ton code manque globalement de logique : tu fais les contrôles à l'affichage, selon cette séquence :

    1. extraire un bout de chaîne
    2. le convertir en int
    3. test si le bout de chaîne est valide
      1. tester si le bout de chaîne contient des chiffres
      2. le convertir en int
      3. tester si le int est valide
    4. si le test est valide alors afficher des trucs en fonction de la valeur convertie en 1


    Comme le test est fait à l'affichage : ça veut dire qu'on peut affecter un code de sécurité sociale (par la méthode setCh) et ne savoir qu'il est incorrect que quand on l'affiche par la méthode affiche().

    Dans setCh, tu pourrais faire le test et soulever une exception (ce qui une manière plus courante en Java de traiter les cas d'erreur que retourner un booléen). Si tu testes tout de suite que le code fait une longueur de 13 caractères (ou de 15 si tu inclus le traitement de la clé), puis que tu testes que ça contient que des chiffres ensuite, plus besoin de faire ce test ensuite, pour chaque partie du code. Cela dit, on pourrait largement se passer de ce test, parce que le numéro de sécurité social est surtout un code, pas un nombre, même s'il n'est constitué que de chiffres.

    On pourrait faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    public void verifierSexe(char c) {
       switch(c) {
          case '1':
          case '2':
          case '3':
          case '4':
          case '7':
          case '8':
             break;
          default:
             throw new IllegalArgumentException("Code de sexe incorrecte");
       }
    }
    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
    public void setCh(String ch) {
        if ( ch.length!=13 && ch.length!=15 ) {
             throw new IllegalArgumentException("Il devrait y avoir 13 chiffres (ou 15 avec la clé)");
        }
        for(int i=0; i<ch.length; i++) {
             char c=ch.charAt(i);
             if ( c<'0' || c>'9' ) {
                  if ( i!=7 || !(ch.charAt(i-1)=='2' && (c=='A'||c=='B')) )  { // cas de la Corse
                     throw new IllegalArgumentException("Caractère incorrect en position " + (i+1) +": " + c);
                  }
                }
             }
        }
        verifierSexe(ch.charAt(0));
        // verifier le reste
        if ( ch.length==15 ) {
            // verifier la clef
        }
        this.ch=ch;
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     boolean ok=false;
    do {
    			 String ch= Saisie.lire_String("Entrez votre numéro de Sécurité sociale : ");
    			 try {
    				 Numero.setCh(ch);
    				 ok=true;
    			 }
    			 catch(IllegalArgumentException e) {
    				 System.err.println("Erreur de saisie : " + e.getMessage()+"\nRecommencez...");
    			 }
    } while(!ok);
    Par ailleurs, normalement une classe doit être mise dans un fichier qui porte le même nom, casse comprise. Faire ce que tu fais, créer un fichier numsoc.java pour y mettre une classe Num_Sec_Soc, est un détournement possible du système mais ça va te faire prendre de mauvaises habitudes et ensuite tu seras gêné pour importer tes classes dans un autre package. Oublie même cette possibilité de faire des classes non publiques dans les fichiers Java : ça ne sert qu'à rendre confus le code.
    Enfin, il y a des conventions d'écriture en Java, qui facile la lecture du code par tous, parce que ça fait un système commun. Aussi nommer ses méthodes ou variable avec un nom qui a du sens facilite aussi cette lecture et la compréhension du code. Un petit peu de logique également : appeler une méthode TestErreur qui retourne true lorsqu'il n'y a pas d'erreur n'est pas logique (estValide(), nestPasEnErreur()...) ou alors testErreur() retourne true lorsqu'il y a erreur.
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  3. #3
    Membre éclairé Avatar de dedalios
    Homme Profil pro
    concepteur d'application
    Inscrit en
    Février 2008
    Messages
    495
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : concepteur d'application
    Secteur : Santé

    Informations forums :
    Inscription : Février 2008
    Messages : 495
    Par défaut Réflection pertinente
    Merci je vais reprendre tous cela.
    Un N° de sécu n'est pas uniquement numérique 2A 2B pour le code de département sont un codage possible selon wikipedia...
    Étrangement je n'en ai jamais vue...

    Le code est une récupération qui ne contenais que les affichages sans aucune forme de contrôle je cherche donc a intégrer les processus de contrôle

  4. #4
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par dedalios Voir le message
    Un N° de sécu n'est pas uniquement numérique 2A 2B pour le code de département sont un codage possible selon wikipedia...
    Oui, oui, c'est pourquoi j'ai inclus ce cas dans mon exemple.

    Citation Envoyé par dedalios Voir le message
    Étrangement je n'en ai jamais vue...
    Personnellement, je n'ai pas vu des masses de numéro de sécu, à part le mien, et n'étant pas natif de Corse... jamais vu non plus.
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  5. #5
    Membre éclairé Avatar de dedalios
    Homme Profil pro
    concepteur d'application
    Inscrit en
    Février 2008
    Messages
    495
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : concepteur d'application
    Secteur : Santé

    Informations forums :
    Inscription : Février 2008
    Messages : 495
    Par défaut Probleme
    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
     
      public void setCh(String ch) {
        if ( ch.length!=13 && ch.length!=15 ) {
             throw new IllegalArgumentException("Il devrait y avoir 13 chiffres (ou 15 avec la clé)");
        }
        for(int i=0; i<ch.length; i++) {
             char c=ch.charAt(i);
             if ( c<'0' || c>'9' ) {
                  if ( i!=7 || !(ch.charAt(i-1)=='2' && (c=='A'||c=='B')) )  { // cas de la Corse
                     throw new IllegalArgumentException("Caractère incorrect en position " + (i+1) +": " + c);
                  }
                }
             }
        }
        verifierSexe(ch.charAt(0));
        // verifier le reste
        if ( ch.length==15 ) {
            // verifier la clef
        }
        this.ch=ch;
    }

    le code a un problème

    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
     
    class Numsecsoc {
      private String ch; 
     
      public String getCh() {
    		return ch;
      }
     
      public void verifierSexe(char c) {
    	   switch(c) {
    	      case '1':
    	      case '2':
    	      case '3':
    	      case '4':
    	      case '7':
    	      case '8':
    	         break;
    	      default:
    	         throw new IllegalArgumentException("Code de sexe incorrecte");
    	         }
    	   }
     
      public void setCh(String ch) {
    	    if ( ch.length()!=13 && ch.length()!=15 ) {
    	         throw new IllegalArgumentException("Il devrait y avoir 13 chiffres (ou 15 avec la clé)");
    	    }
     
    	    for(int i=0; i<ch.length(); i++) {
    	         char c=ch.charAt(i);
    	         if ( c<'0' || c>'9' ) {
    	              if ( i!=7 || !(ch.charAt(i-1)=='2' && (c=='A'||c=='B')) ) 
    	              	{ // cas de la Corse
    	                 throw new IllegalArgumentException("Caractère incorrect en position " + (i+1) +": " + c);
    	              	}
    	            }
    	         }
    	    verifierSexe(ch.charAt(0));
    	    // verifier le reste
    	    if ( ch.length()==15 ) {
    	        // verifier la clef
    	    }
    	    this.ch=ch;
    	}
    }

  6. #6
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par dedalios Voir le message
    le code a un problème
    Tu l'as corrigé par toi même
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  7. #7
    Membre éclairé Avatar de dedalios
    Homme Profil pro
    concepteur d'application
    Inscrit en
    Février 2008
    Messages
    495
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : concepteur d'application
    Secteur : Santé

    Informations forums :
    Inscription : Février 2008
    Messages : 495
    Par défaut J'ai un doute sur ce code
    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
     
      public void verifier_mois(String chaine) {
    		/* de 01 (janvier) à 12 (décembre) ou 62 ou 63 pour un mois non connu */
    		String mois = chaine.substring(3, 5);
    		char c0 = mois.charAt(0);
    		char c1 = mois.charAt(1);
     
    		boolean test=true;
    		  switch(c0) {
    		  case '0':
    				if (c1 < '1'  || c1 >'9') {
    					test = false;
    				} 
    				else {
    					test = true;
    					}
    			  break;
    		  case '1':
    				if (c1 < '0'  || c1 >'2') {
    					test = false;
    				} 
    				else {
    					test = true;
    					}
    			  break;
    		  case '6':
    			  if (c1 != '2'  || c1 != '3') {
    					test = false;
    				} 	
    			  else {
    					test = true;
    					}
    			  break;
     
    		  }
     
    		if(test) {
    			throw new IllegalArgumentException("Erreur sur le mois : ");
    		}
    		//mois >="01" || mois >="12" || mois == "62"  || mois == "63"
      }
    est-il cohérent j'avoue le perdre entre le terme "ou" ou ceci ou cela est le ou logique ? je me croise les yeux sesoir

Discussions similaires

  1. Probléme C++ - Chaine de type String
    Par allan02390 dans le forum C++
    Réponses: 2
    Dernier message: 18/12/2007, 11h21
  2. Réponses: 11
    Dernier message: 22/03/2006, 21h57
  3. Bug strtok sur chaine de type x;y;;z
    Par CanardJM dans le forum C
    Réponses: 15
    Dernier message: 05/01/2006, 10h16
  4. Réponses: 4
    Dernier message: 20/08/2004, 10h59
  5. [LG]type entier
    Par fakroun dans le forum Langage
    Réponses: 3
    Dernier message: 20/11/2003, 23h39

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