1. #1
    Candidat au Club
    Femme Profil pro
    Collégien
    Inscrit en
    novembre 2017
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 25
    Localisation : Marshall (iles)

    Informations professionnelles :
    Activité : Collégien

    Informations forums :
    Inscription : novembre 2017
    Messages : 18
    Points : 2
    Points
    2

    Par défaut appel de methodes dans une meme classe

    Bonjour,

    J'ai un exercice qui me demande d'appeler, a partir d'une methode statique string, une autre methode staique booleen dans une meme classe.

    Soit :

    public static String saisirEtValiderCodePostal (String invite, int noCivique) appelle public static boolean positionLettresEtChiffresAlternee (String codePostal).

    Le paramètre invite est le message qui sera affiché pour demander à l'utilisateur
    d'entrer un code. Le paramètre noCivique servira lors de la validation du code.
    Retourne le code valide.



    Honnetement, je ne sais pas le faire et je ne le vois nulle part dans mon cours de Java pour debutant.



    Merci pour votre aide.

  2. #2
    Rédacteur/Modérateur

    Avatar de bouye
    Homme Profil pro
    Information Technologies Specialist (Scientific Computing)
    Inscrit en
    août 2005
    Messages
    5 730
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Nouvelle-Calédonie

    Informations professionnelles :
    Activité : Information Technologies Specialist (Scientific Computing)
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : août 2005
    Messages : 5 730
    Points : 20 318
    Points
    20 318
    Billets dans le blog
    31

    Par défaut

    Commence donc par écrire ta classe avec ses deux méthodes statique dedans.
    Ensuite tu verras que ce n'est pas très différent (dans ce cas précis) de l'invocation de méthodes non-statiques (que tu as deja du voir en cours j'imagine).

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    public class Truc {
     
        public static void faitKekchose(String unPremierParametre, int unSecondParametre) {
            [...]
            boolean leResultatDeLAppel = faitUnTruc(leBonParametre);
            [...]
        }
     
        public static boolean faitUnTruc(String unParametre) {
            [...]
            return unResultaKelconke;
        }
    }
    Merci de penser au tag quand une réponse a été apportée à votre question. Aucune réponse ne sera donnée à des messages privés portant sur des questions d'ordre technique. Les forums sont là pour que vous y postiez publiquement vos problèmes.

    suivez mon blog sur Développez.

    Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the universe trying to produce bigger and better idiots. So far, the universe is winning. ~ Rich Cook

  3. #3
    Candidat au Club
    Femme Profil pro
    Collégien
    Inscrit en
    novembre 2017
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 25
    Localisation : Marshall (iles)

    Informations professionnelles :
    Activité : Collégien

    Informations forums :
    Inscription : novembre 2017
    Messages : 18
    Points : 2
    Points
    2

    Par défaut

    Bonsoir,

    Merci pour votre aide.

    Voicie ce que je propose :

    Code JAVA : 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
     
    public static String saisirEtValiderCodePostal(String invite, int noCivique)
        {
            System.out.println(invite);
     
            // ...
            String codePostal;
     
            // appel de la methode public static int saisirEtValiderNoCivique 
            //(String invite, int min, int max)
            noCivique = saisirEtValiderNoCivique (invite, 1, 9999);
            //
     
     
            //appel de la methode public static boolean 
            //positionLettresEtChiffresAlternee (String codePostal)
            boolean result = positionLettresEtChiffresAlternee(codePostal);
            //
     
            int strlen;
            strlen= codePostal.length();
     
            while (codePostal.length() == 6) {
                codePostal = Clavier.lireString();
     
                // verifie et valide la longueur du code postal
                do  {
                    System.out.println("ERREUR! La longueur du code postal doit" +
                        "etre egale a 6!");
                    codePostal = Clavier.lireString();
     
                } while (strlen!=6) ; 
                //
     
                //Valide le code postal, parite pair et impair entre 
                //le num civique et la troisieme lettre alphabet du code postal
                if(codePostal.indexOf(codePostal.charAt(4))%2 ==0 && noCivique%2 !=0){
                    System.out.println ("ERREUR! La parite de la troisieme lettre du code"+ 
                        "postal doit correspondre a celle du numero civique!" );
     
                }
     
                if(codePostal.indexOf(codePostal.charAt(4))%2 !=0 && noCivique%2 ==0){
                    System.out.println ("ERREUR! La parite de la troisieme lettre du code"+ 
                        "postal doit correspondre a celle du numero civique!" );
     
                }
                //
            }
            return codePostal;
        }

    Par contre je ne sais pas quoi faire avec le result.

    J'ai un autre probleme : dans le main je souhaiterai faire appel a cette methode mais il m'affiche une erreur :
    Code java
    :
    Sélectionner tout - Visualiser dans une fenêtre à part
    String codePostal = saisirEtValiderCodePostal("Entrez un code postal SANS espaces pour la PREMIERE adresse", NoCivique);

    J'ai tout mis, codePostal, result..rien a faire !!!

    Merci pour votre aide.

    Cordialement.

  4. #4
    Rédacteur/Modérateur

    Avatar de bouye
    Homme Profil pro
    Information Technologies Specialist (Scientific Computing)
    Inscrit en
    août 2005
    Messages
    5 730
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Nouvelle-Calédonie

    Informations professionnelles :
    Activité : Information Technologies Specialist (Scientific Computing)
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : août 2005
    Messages : 5 730
    Points : 20 318
    Points
    20 318
    Billets dans le blog
    31

    Par défaut

    Citation Envoyé par BaDinh Voir le message
    mais il m'affiche une erreur :
    Erreur qui est ?
    Merci de penser au tag quand une réponse a été apportée à votre question. Aucune réponse ne sera donnée à des messages privés portant sur des questions d'ordre technique. Les forums sont là pour que vous y postiez publiquement vos problèmes.

    suivez mon blog sur Développez.

    Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the universe trying to produce bigger and better idiots. So far, the universe is winning. ~ Rich Cook

  5. #5
    Candidat au Club
    Femme Profil pro
    Collégien
    Inscrit en
    novembre 2017
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 25
    Localisation : Marshall (iles)

    Informations professionnelles :
    Activité : Collégien

    Informations forums :
    Inscription : novembre 2017
    Messages : 18
    Points : 2
    Points
    2

    Par défaut

    dans le main :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    String codePostal = saisirEtValiderCodePostal("Entrez un code postal SANS" + 
                    "espaces pour la PREMIERE adresse", noCivique);
    il m'affiche " Cannot find Symbol - variable noCivique". Si je l'enleve, une autre erreur s'affiche pour "saisirEtValiderCodePostal" : cannot be applied to given types...".

    Merci.

  6. #6
    Rédacteur/Modérateur

    Avatar de bouye
    Homme Profil pro
    Information Technologies Specialist (Scientific Computing)
    Inscrit en
    août 2005
    Messages
    5 730
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Nouvelle-Calédonie

    Informations professionnelles :
    Activité : Information Technologies Specialist (Scientific Computing)
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : août 2005
    Messages : 5 730
    Points : 20 318
    Points
    20 318
    Billets dans le blog
    31

    Par défaut

    L'erreur est plutôt claire (bien sur si tu ne maîtrise pas l'anglais je suis conscient que ce n'est peut-être pas le cas pour toi, pas de soucis de ce cote-la) : il n'existe aucune variable noCivique a cet endroit (PS : dans le 1er code que tu as copie il y a un n majuscule, vérifie ton code, il y a peut-être une faute de frappe ou tu as nommé la variable différemment).
    Merci de penser au tag quand une réponse a été apportée à votre question. Aucune réponse ne sera donnée à des messages privés portant sur des questions d'ordre technique. Les forums sont là pour que vous y postiez publiquement vos problèmes.

    suivez mon blog sur Développez.

    Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the universe trying to produce bigger and better idiots. So far, the universe is winning. ~ Rich Cook

  7. #7
    Candidat au Club
    Femme Profil pro
    Collégien
    Inscrit en
    novembre 2017
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 25
    Localisation : Marshall (iles)

    Informations professionnelles :
    Activité : Collégien

    Informations forums :
    Inscription : novembre 2017
    Messages : 18
    Points : 2
    Points
    2

    Par défaut

    De ce cote j'ai verifie, pas d'erruer de frappe.

    Voici ce que j'ai dans le main au complet:

    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
     
    public static void main (String[] params) {
     
            int no1 = saisirEtValiderNoCivique("Entrez un numero" +
                    "civique pour la PREMIERE adresse : ", 1, 9999);
     
            int no2 = saisirEtValiderNoCivique("Entrez un numero" +
                    "civique pour la DEUXIEME adresse : ", 1, 9999);
     
            String codePostal = saisirEtValiderCodePostal("Entrez un code postal SANS" + 
                    "espaces pour la PREMIERE adresse", noCivique );
     
     
     
            boolean saisie = continuer("Voulez-vous traiter des combinaisons" + 
                    "de codes postaux et de numeros civiques (oui / non)?");
     
        } // main
    1. Si je remplace No1 par noCivique, l'erreur disparait .
    2. Une autre erreur apparait dans la methode String saisirEtValiderCodePostal(String invite, int noCivique) :
    boolean result = positionLettresEtChiffresAlternee(codePostal); /// "variable codePostal might not have been initialized".
    A moins que je fasse dans cette methode : codePostal = Clavier.lireString(); qui lui est deja repete dans le while dans cette methode !!!!

    Bizarre non !!!

    Merci

  8. #8
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java/Eclipse RCP
    Inscrit en
    septembre 2009
    Messages
    10 399
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : septembre 2009
    Messages : 10 399
    Points : 24 931
    Points
    24 931
    Billets dans le blog
    2

    Par défaut

    Salut,

    Citation Envoyé par BaDinh Voir le message
    1. Si je remplace No1 par noCivique, l'erreur disparait .
    C'est normal, le message d'erreur "Cannot find Symbol - variable noCivique" dit qu'aucune variable du nom "noCivique" n'est accessible à l'endroit où il y a l'erreur. Si tu renommes une variable accessible à cet endroit "noCivique", elle existe alors, donc le message n'a plus lieu d'être.

    Ce n'est pas parce que la signature de la méthode saisirEtValiderCodePostal(String invite, int noCivique) a un second paramètre de nom "noCivique" qu'il faut que dans l'appel la variable s'appelle comme ça. Il faut simplement passer la valeur attendue, éventuellement par une variable qui existe.

    De ce cote j'ai verifie, pas d'erruer de frappe.

    Citation Envoyé par BaDinh Voir le message
    Voici ce que j'ai dans le main au complet:

    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
     
    public static void main (String[] params) {
     
            int no1 = saisirEtValiderNoCivique("Entrez un numero" +
                    "civique pour la PREMIERE adresse : ", 1, 9999);
     
            int no2 = saisirEtValiderNoCivique("Entrez un numero" +
                    "civique pour la DEUXIEME adresse : ", 1, 9999);
     
            String codePostal = saisirEtValiderCodePostal("Entrez un code postal SANS" + 
                    "espaces pour la PREMIERE adresse", noCivique );
     
     
     
            boolean saisie = continuer("Voulez-vous traiter des combinaisons" + 
                    "de codes postaux et de numeros civiques (oui / non)?");
     
        } // main
    On voit que la variable noCivique n'est pas déclarée dans la méthode main. Tu as deux variables, no1 et no2, c'est l'une de celle-ci qu'il faut passer, si l'une de celle-ci correspond bien à l'information attendue en paramètre (ce qu'il semble être le cas, d'après le nom, il s'agit du numéro civique, ce qu'on a bien l'air de saisir dans no1 et no2. Et comme il s'agit du code postal correspondant à la première adresse, il semblerait que ça soit no1 qu'il faille passer. Remplacer no1 par noCivique, ou remplacer noCivique par no1 dans le code précédent en bref.

    Citation Envoyé par BaDinh Voir le message
    2. Une autre erreur apparait dans la methode String saisirEtValiderCodePostal(String invite, int noCivique) :
    boolean result = positionLettresEtChiffresAlternee(codePostal); /// "variable codePostal might not have been initialized".
    A moins que je fasse dans cette methode : codePostal = Clavier.lireString(); qui lui est deja repete dans le while dans cette methode !!!!
    Bizarre non !!!
    Non. Pour pouvoir utiliser la valeur d'une variable, ce qui est fait quand tu la passes en paramètre dans un appel de méthode, il faut qu'elle ait une valeur, donc qu'elle ait été affectée au moins une fois de façon sure. Si la variable est affectée dans un while, le compilateur peut ne pas être sûr qu'on rentre bien dans le while, donc que l'affectation dans le while soit bien effectuée, et donc considère que la variable peut ne pas avoir de valeur et refuse donc de compiler. A toi de t'arranger pour qu'il y ait forcément une valeur affectée, quitte à mettre une valeur bidon, et que le reste du code garantisse qu'au final il y ait une valeur valide.

    Le code suivant ne compile pas :
    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
    public static void main(String[] args) {
     
     
    		String valeur;
     
    		boolean saisieInvalide=true;
    		while(saisieInvalide) {
    			System.out.println("Saisir oui ou non:");
    			valeur = Clavier.lireString();
    			if ( "oui".equalsIgnoreCase(valeur) || "non".equalsIgnoreCase(valeur) ) {
    				saisieInvalide=false;
    			}
    		}
     
    		System.out.println(valeur);
     
    	}
    Le code suivant compile, parce qu'on a affecté une valeur (null) à valeur, qui n'est bien sûr pas une valeur qu'on veut utiliser après, mais comme on entre forcément dans le while, et qu'on en sort que si on a une valeur valide, pas de problème pour la suite...

    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
    public static void main(String[] args) {
     
     
    		String valeur=null;
     
    		boolean saisieInvalide=true;
    		while(saisieInvalide) {
    			System.out.println("Saisir oui ou non:");
    			valeur = Clavier.lireString();
    			if ( "oui".equalsIgnoreCase(valeur) || "non".equalsIgnoreCase(valeur) ) {
    				saisieInvalide=false;
    			}
    		}
     
    		System.out.println(valeur);
     
    	}
    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.

  9. #9
    Candidat au Club
    Femme Profil pro
    Collégien
    Inscrit en
    novembre 2017
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 25
    Localisation : Marshall (iles)

    Informations professionnelles :
    Activité : Collégien

    Informations forums :
    Inscription : novembre 2017
    Messages : 18
    Points : 2
    Points
    2

    Par défaut

    Bonjour,

    merci pour votre aide.

    Au sujet de :

    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
    public static void main(String[] args) {
     
     
    		String valeur=null;
     
    		boolean saisieInvalide=true;
    		while(saisieInvalide) {
    			System.out.println("Saisir oui ou non:");
    			valeur = Clavier.lireString();
    			if ( "oui".equalsIgnoreCase(valeur) || "non".equalsIgnoreCase(valeur) ) {
    				saisieInvalide=false;
    			}
    		}
     
    		System.out.println(valeur);
     
    	}
    J'avais deja cree auparavant une methode pour la saisie oui non, dont le voici :

    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
     
    public static boolean continuer (String msgInvite){
            String saisie = null;  
     
            System.out.println(msgInvite);
     
            while(true)
            {            
                saisie = Clavier.lireString();
     
                if(saisie.equalsIgnoreCase("oui") || saisie.equalsIgnoreCase("o"))
                    return true;
     
                if(saisie.equalsIgnoreCase("non") || saisie.equalsIgnoreCase("n"))
                    return false;
                System.out.println("ERREUR! La reponse doit etre oui, non , o ou n" );
     
            }
        }
    et dans le main :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    boolean saisie = continuer("Voulez-vous traiter des combinaisons" + 
                    "de codes postaux et de numeros civiques (oui / non)?");
    Qu'en pensez vous ?

  10. #10
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java/Eclipse RCP
    Inscrit en
    septembre 2009
    Messages
    10 399
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : septembre 2009
    Messages : 10 399
    Points : 24 931
    Points
    24 931
    Billets dans le blog
    2

    Par défaut

    Citation Envoyé par BaDinh Voir le message
    Qu'en pensez vous ?
    Que c'est une bonne solution à ton exercice... mais que ça n'a rien à voir avec le problème que tu exposes dans la présente discussion, et pour lequel j'ai donné juste un exemple de principe pour illustrer ma réponse.
    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.

  11. #11
    Candidat au Club
    Femme Profil pro
    Collégien
    Inscrit en
    novembre 2017
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 25
    Localisation : Marshall (iles)

    Informations professionnelles :
    Activité : Collégien

    Informations forums :
    Inscription : novembre 2017
    Messages : 18
    Points : 2
    Points
    2

    Par défaut

    Merci,

    Mais c'est bon a savoir aussi.

    Desole du detournement.

    Au sujet de la derniere discussion , c'est regle !!!

    Par contre quand je compile et que je teste, ca crashe lorsque je valide le code postal.

    Pour utiliser la methode "public static String saisirEtValiderCodePostal(String invite, int noCivique)", j'ai aussi fait appel a la methode "public static boolean positionLettresEtChiffresAlternee (String codePostal)", dont voici le 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
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    public static boolean positionLettresEtChiffresAlternee (String codePostal){
     
            // au cas où il a été entré en minuscules
            codePostal=codePostal.toUpperCase();
     
            boolean result;
     
            // valeurs permises
            String a= "ABCDEFGHIJKLMNOPQRSTUVWXYZ" ;        
            String c= "0123456789" ;
     
            while (result = false){
                // compare, une par une, les valeurs entrées à celles permises
                if(a.indexOf(codePostal.charAt(0))<0){
                    System.out.println ("ERREUR! Le format du code postal doit etre :" + 
                        "Lettre Chiffre Lettre Chiffre Lettre Chiffre. " );
                    return false ;
                }
     
                if(c.indexOf(codePostal.charAt(1))<0){
                    System.out.println ("ERREUR! Le format du code postal doit etre :" + 
                        "Lettre Chiffre Lettre Chiffre Lettre Chiffre. " );
                    return false ; 
                }
     
                if(a.indexOf(codePostal.charAt(2))<0){
                    System.out.println ("ERREUR! Le format du code postal doit etre :" + 
                        "Lettre Chiffre Lettre Chiffre Lettre Chiffre. " );
                    return false ; 
                }
     
                if(c.indexOf(codePostal.charAt(3))<0){
                    System.out.println ("ERREUR! Le format du code postal doit etre :" + 
                        "Lettre Chiffre Lettre Chiffre Lettre Chiffre. " );
                    return false ; 
                }
     
                if(a.indexOf(codePostal.charAt(4))<0){
                    System.out.println ("ERREUR! Le format du code postal doit etre :" + 
                        "Lettre Chiffre Lettre Chiffre Lettre Chiffre. " );
                    return false ;
                }
     
                if(a.indexOf(codePostal.charAt(5))<0){
                    System.out.println ("ERREUR! Le format du code postal doit etre :" + 
                        "Lettre Chiffre Lettre Chiffre Lettre Chiffre. " );
                    return false ; 
                }
            }
            return result;
        }
    Cette methode, qui retourne faux si le format nest pas respecte, ne verifie pas la longueur du code postal et ne fait pas de saisie ni d'affichage.

    Merci pour votre aide.

  12. #12
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java/Eclipse RCP
    Inscrit en
    septembre 2009
    Messages
    10 399
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : septembre 2009
    Messages : 10 399
    Points : 24 931
    Points
    24 931
    Billets dans le blog
    2

    Par défaut

    Citation Envoyé par BaDinh Voir le message
    Par contre quand je compile et que je teste, ca crashe lorsque je valide le code postal.
    Ne jamais utiliser d'expression comme "ça crashe", ou "ça marche pas". Nous dire "j'ai telle erreur : "le message affiché", ou "j'ai tel résultat xxx alors que je devrais avoir yyy", ou ça affiche 3 fois tel truc alors que je voudrais que ça l'affiche qu'une fois, etc.



    1. Code : Sélectionner tout - Visualiser dans une fenêtre à part
       if(a.indexOf(codePostal.charAt(0))<0){
      ne jamais appeler charAt(une constante) sans avoir testé la taille de la chaîne avant. Si la chaîne est vide, ça fait une erreur "StringIndexOutOfBountException" parce que le caractère de position 0 n'existe pas dans la chaîne.

    2. Code : Sélectionner tout - Visualiser dans une fenêtre à part
      while (result = false) {
      Attention, en Java l'opérateur = est TOUJOURS l'opérateur d'affectation même dans une condition. Le code que tu écris mets donc false dans result, puis teste s'il faut entrer dans le while : result étant false, alors la réponse est non, donc on n'exécute pas le while. Et on retourne, à la fin de la méthode, result, donc false. Ta méthode retourne donc toujours false, quelque soit la saisie.

      L'opérateur de test d'égalité pour les types primitifs, comme boolean, est

      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      1
      2
      3
      while (result == false) {
      /*...*/
      }
      Ou alors :

      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      1
      2
      3
      while (!result) {
      /*...*/
      }

    3. En l’occurrence, ton while ne sert à rien, puisque tu testes toutes les positions par des constantes de 0 à 5. Une boucle est une bonne idée, vu qu'on a trois fois de suite la même condition, mais un peu plus difficile à mettre au point pour une débutante.


    4. A noter qu'à la place d'un indexOf(), pour tester l'appartenance à un intervalle de caractères, on peut comparer directement le caractère avec des caractères :
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      1
      2
      3
      if ( 'A'<=c && c<='Z' ) {
          // c est une lettre comprise entre A et Z, incluses
      }
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      1
      2
      3
      if ( c<'A' || 'Z'<c ) {
          // c n'est pas une lettre comprise entre A et Z, incluses
      }
    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.

  13. #13
    Candidat au Club
    Femme Profil pro
    Collégien
    Inscrit en
    novembre 2017
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 25
    Localisation : Marshall (iles)

    Informations professionnelles :
    Activité : Collégien

    Informations forums :
    Inscription : novembre 2017
    Messages : 18
    Points : 2
    Points
    2

    Par défaut

    1.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     if(a.indexOf(codePostal.charAt(0))<0){
    ne jamais appeler charAt(une constante) sans avoir testé la taille de la chaîne avant. Si la chaîne est vide, ça fait une erreur "StringIndexOutOfBountException" parce que le caractère de position 0 n'existe pas dans la chaîne.
    Ok, je sais que le codePostal doit etre : lettreChiffreLettreChiffrelettreChiffre. Donc n'est-il pas suffisant d'initialiser les string a et c. De plus le le string codePostal est deja declare.

    A moins que je transforme les String a et c en constantes ou que je definisse le length du codePostal !!!

    Merci

  14. #14
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java/Eclipse RCP
    Inscrit en
    septembre 2009
    Messages
    10 399
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : septembre 2009
    Messages : 10 399
    Points : 24 931
    Points
    24 931
    Billets dans le blog
    2

    Par défaut

    Citation Envoyé par BaDinh Voir le message
    Ok mais n'est-il pas suffisant d'initialiser les string a et c. De plus le le string codePostal est deja declare.
    Le fait que codePostal soit vide n'a strictement rien à voir ni avec a ni avec c. Et le fait qu'une variable soit déclarée ne garantit rien au sujet de son contenu, qui plus est si la valeur est issue d'une saisie clavier.

    Citation Envoyé par BaDinh Voir le message
    A moins que je transforme les String a et c en constantes ou que je definisse le length du codePostal !!!
    Aucun rapport non plus, constantes ou pas ça ne change rien. Et la longueur du code postal est aussi à tester à priori : si le code postal doit être trois alternances successives d'une lettre et d'un chiffre, un code postal qui n'est pas de longueur 6 n'est pas valide !
    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.

  15. #15
    Candidat au Club
    Femme Profil pro
    Collégien
    Inscrit en
    novembre 2017
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 25
    Localisation : Marshall (iles)

    Informations professionnelles :
    Activité : Collégien

    Informations forums :
    Inscription : novembre 2017
    Messages : 18
    Points : 2
    Points
    2

    Par défaut

    Donc il suffit juste de mettre un :

    codePostal = Clavier.lireString();

    dans le while.

  16. #16
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java/Eclipse RCP
    Inscrit en
    septembre 2009
    Messages
    10 399
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : septembre 2009
    Messages : 10 399
    Points : 24 931
    Points
    24 931
    Billets dans le blog
    2

    Par défaut

    Citation Envoyé par BaDinh Voir le message
    Donc il suffit juste de mettre un :

    codePostal = Clavier.lireString();

    dans le while.
    Probablement pas puisque c'est un paramètre de ta méthode : il est censé être saisi ailleurs et cette méthode ne fait que le contrôle (d'après son nom). Ou alors cette méthode serait censée gérer la saisie, et donc, le paramètre devrait être supprimé et remplacé par une variable locale, et le type de la méthode ne serait plus boolean, mais String (le retour serait le code postal). Cela change complètement la spécification de la méthode. Si la signature de la méthode t'est imposée, ce n'est certainement pas la solution.

    Par ailleurs, ça ne change rien au fait que codePostal peut être vide. Que Clavier.lireString() soit appelé dans le while, dans la méthode hors du while, ou dans une autre méthode, ça ne change rien au fait que l'utilisateur peut appuyer sur la touche entrée sans avoir saisi aucun autre caractère.
    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.

  17. #17
    Candidat au Club
    Femme Profil pro
    Collégien
    Inscrit en
    novembre 2017
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 25
    Localisation : Marshall (iles)

    Informations professionnelles :
    Activité : Collégien

    Informations forums :
    Inscription : novembre 2017
    Messages : 18
    Points : 2
    Points
    2

    Par défaut

    Merci.

    Je vois ce que vous voulez me dire. Mais... non, je ne vois pas comment en code .

    Dans ma tete, le codage que j'ait me parait correct... mais il y a erreur !!! Va donc savoir !!!

    L'erreur est-elle dans l'une des deux methodes ou dans les deux ?

    Si c'est dans l'une, je me verrai plus a revoir la methode saisirEtValidercodePostale.

    Si c'est les deux... c pas bien parti pour moi !!!!

    Merci pour votre aide !!! Un poquito hint en code m'aiderait peut-etre

  18. #18
    Candidat au Club
    Femme Profil pro
    Collégien
    Inscrit en
    novembre 2017
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 25
    Localisation : Marshall (iles)

    Informations professionnelles :
    Activité : Collégien

    Informations forums :
    Inscription : novembre 2017
    Messages : 18
    Points : 2
    Points
    2

    Par défaut

    Bonsoir,

    je me suis permis de faire quelques ameliorations dans 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
     
    public static boolean positionLettresEtChiffresAlternee (String codePostal){
     
            // retourne faux si le format du code n'est pas une alternance de lettres 
            //et chiffres. Retourne vrai si le format est respecte. Ne verifie pas 
            //la longueur du code, ne fait pas de saisie ni d'affichage.
     
            boolean code;
            code = true;
     
            // au cas où il a été entré en minuscules
            codePostal=codePostal.toUpperCase();
     
            // valeurs permises
            String a= "ABCDEFGHIJKLMNOPQRSTUVWXYZ" ;        
            String c= "0123456789" ;
     
            // compare, une par une, les valeurs entrées à celles permises
            if(a.indexOf(codePostal.charAt(0))<0
            && c.indexOf(codePostal.charAt(1))<0
            && a.indexOf(codePostal.charAt(2))<0
            && c.indexOf(codePostal.charAt(3))<0
            && a.indexOf(codePostal.charAt(4))<0
            && c.indexOf(codePostal.charAt(5))<0){
     
                return false;
     
            }
            return code;
        }
    Je ne vois pas d'erreurs de codage pour le moment !!!

  19. #19
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java/Eclipse RCP
    Inscrit en
    septembre 2009
    Messages
    10 399
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : septembre 2009
    Messages : 10 399
    Points : 24 931
    Points
    24 931
    Billets dans le blog
    2

    Par défaut

    Citation Envoyé par BaDinh Voir le message
    L'erreur est-elle dans l'une des deux methodes ou dans les deux ?
    Je ne sais pas de quelle erreur tu parles maintenant. D'ailleurs, je ne sais pas de quelle erreur on parlait, puisque tu ne me l'a pas dit (tu m'as juste dit : "ca crashe" et je t'ai dit que ça ne voulait rien dire, et que tu devais me dire quelle erreur tu avais. Du coup, j'ai juste commenté le code que tu montrais. Et on parlait jusqu'ici de positionLettresEtChiffresAlternee. Donc quand tu parles de while, j'en déduis que tu parles du while dans cette méthode. Et dans cette méthode, il n'y a pas à lire le code postal, puisqu'il est passé en paramètre, par appel dans saisirEtValiderCodePostal dans laquelle on fait sa lecture au clavier.


    Citation Envoyé par BaDinh Voir le message

    Je ne vois pas d'erreurs de codage pour le moment !!!
    Bah, moi j'en vois une de taille : le &. Le code postal est invalide si toutes les conditions sont vraies en même temps. Pourtant les codes postaux "1ab2c3" ou "aab2c3" sont invalides, non ?

    Et puis je t'ai dit que si le code postal saisi ne fait pas 6 caractères exactement, par exemple "a1b2", une exception sera soulevée à l'exécution (et ton programme va s'arrêter).

    Sinon, un détail, la variable code ne sert à rien, tu peux directement faire return true; à la fin de la méthode.
    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.

  20. #20
    Candidat au Club
    Femme Profil pro
    Collégien
    Inscrit en
    novembre 2017
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 25
    Localisation : Marshall (iles)

    Informations professionnelles :
    Activité : Collégien

    Informations forums :
    Inscription : novembre 2017
    Messages : 18
    Points : 2
    Points
    2

    Par défaut

    Bonsoir,

    Merci pour votre aide.

    Voici ce que je propose :

    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
     
     
    public static boolean positionLettresEtChiffresAlternee (String codePostal){
     
     
     
            boolean code;
            code = true;
     
            // au cas où il a été entré en minuscules
            codePostal=codePostal.toUpperCase();    
     
            // compare, une par une, les valeurs entrées à celles permises
            if( (codePostal.length() == 6)        
            && (Character.isLetter(codePostal.charAt(0)))
            && (Character.isDigit(codePostal.charAt(1)))
            && (Character.isLetter(codePostal.charAt(2)))
            && (Character.isDigit(codePostal.charAt(3)))
            && (Character.isLetter(codePostal.charAt(4)))
            && (Character.isDigit(codePostal.charAt(5))))            
            {
                return true;
            } else {
                return false;
            }
     
        }

Discussions similaires

  1. peut on installer 2 ecouteurs dans une meme classe ?
    Par POKOU dans le forum Débuter
    Réponses: 5
    Dernier message: 04/02/2011, 15h59
  2. Réponses: 3
    Dernier message: 14/09/2010, 11h14
  3. Appel membre static dans une autre classe
    Par cyriltec dans le forum C#
    Réponses: 2
    Dernier message: 12/04/2010, 12h23
  4. Probleme appel de fct dans une autre classe
    Par crakotte_finance dans le forum C++
    Réponses: 6
    Dernier message: 09/10/2006, 22h22
  5. [débutant] appeler plusieurs methodes dans une page html
    Par soulhouf dans le forum JavaScript
    Réponses: 5
    Dernier message: 24/08/2005, 20h20

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