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 :

methode avec startsWith()


Sujet :

Langage Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    426
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 426
    Par défaut methode avec startsWith()
    Bonjour à tous,

    J'ai mis en place une sorte de systeme de securité... qui ne marche pas!

    en fait je veux que l'utilisateur tappe 1, 2, 3 ou 4 et q'il tappe autre chose alors je lui renvoit le choix 1,2, 3 ou 4. J'utilise la methode startsWith() mais j'ai un bug, il m'affiche a chque fois que le choix ne fait pas parti du menu pourquoi à votre avis?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    		if (!chaine.startsWith("1")||!chaine.startsWith("2")||!chaine.startsWith("3")||!chaine.startsWith("4")) //detection du premier mot de la chaine de caracteres
    			out.println("\t le choix: "+chaine+" ne fait pas parti du menu!\n");
    merci à tous
    aud-

  2. #2
    Expert confirmé
    Avatar de djo.mos
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    4 666
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 4 666
    Par défaut
    Bonjour.
    Là, c'est plutôt un problème de logique et non pas de Java ... T'as mal exprimé la condition.

    Je te donne juste un exemple et je te laisse découvrir tout seul ce qui cloche:
    L'utilisateur tape "2". Essayons d'evaluer toa condition:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    !chaine.startsWith("1")||!chaine.startsWith("2")||!chaine.startsWith("3")||!chaine.startsWith("4")
    Premier bloc (A):
    !chaine.startsWith("1")
    chaine="2"
    renvoit true.

    Second bloc (B):
    !chaine.startsWith("2")
    chaine="2"
    renvoit false.

    Premier bloc (C):
    !chaine.startsWith("3")
    chaine="2"
    renvoit true.


    Premier bloc (D):
    !chaine.startsWith("4")
    chaine="2"
    renvoit true.

    Pour résumer, A=C=D=true, B=false
    Condition = A ou B ou C ou D = true ou false ou true ou true true.
    Tu ne remarques rien ?

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    426
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 426
    Par défaut
    il faudrait que ce soit l'inverse!
    tout à false et celui qui nous interesse à true.

    il faut mettre !! au lieu de ! devant mes starstWith()?

    Merci à tous
    aud-
    PS: j'aime bien cette façon ludique au lieu de donner la reponse direct

  4. #4
    Membre éprouvé
    Avatar de Janitrix
    Inscrit en
    Octobre 2005
    Messages
    3 391
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 3 391
    Par défaut
    Citation Envoyé par canary Voir le message
    il faudrait que ce soit l'inverse!
    tout à false et celui qui nous interesse à true.

    il faut mettre !! au lieu de ! devant mes starstWith()?
    Euh non tu vires le ! c'est tout

  5. #5
    Expert confirmé
    Avatar de djo.mos
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    4 666
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 4 666
    Par défaut

    mauvaise piste.
    Réfléchis-y: Je vais simplifier ta condition en !chaine.startsWith("1") || !chaine.startsWith("2")

    en bon français, ça revient à si la chaine ne commence pas par un "1" ou ne commence pas par un "2", alos c'est est erreur.

    C'est faux ça ! le "1" ne commence pas par un "2", alors la condition le traite comme erreur alors qu'il est bon !

    Essaies d'exprimer les contraintes en français ensuite traduis en Algèbre de Boole.

  6. #6
    Membre éprouvé
    Avatar de Janitrix
    Inscrit en
    Octobre 2005
    Messages
    3 391
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 3 391
    Par défaut
    Citation Envoyé par djo.mos Voir le message

    mauvaise piste.
    Effectivement, il faut utiliser des && pour ce que tu veux faire. Comprends-tu pourquoi ?

    Mais il n'empèche que !! ne fonctionne pas il me semble...

  7. #7
    Membre éprouvé
    Avatar de mavina
    Homme Profil pro
    Développeur Java
    Inscrit en
    Octobre 2004
    Messages
    1 812
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Chine

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2004
    Messages : 1 812
    Par défaut
    Non "!!" n'a pas de sens, c'est une double négation.
    équivaut à
    mais il fonctionne

    F.

  8. #8
    Expert confirmé
    Avatar de djo.mos
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    4 666
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 4 666
    Par défaut
    Citation Envoyé par Janitrix Voir le message
    Effectivement, il faut utiliser des && pour ce que tu veux faire. Comprends-tu pourquoi ?

    Mais il n'empèche que !! ne fonctionne pas il me semble...
    ouep ... ça passe à la compil, mais ça ne fait absolument rien : "!!" =="".
    De plus, en enlevant les "!" (ou en mettant des "!!", ce qui est vraiment tordu ), la condition renvoie exactement l'inverse de ce qu'il veut, çàd renvoie true quand la chaine est bonne.

  9. #9
    Rédacteur
    Avatar de eclesia
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    2 111
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 111
    Par défaut
    va falloir retourner faire de l'algo aud

    prenons le cas "3" :

    !chaine.startsWith("1") --> VRAI
    !chaine.startsWith("2") --> VRAI
    !chaine.startsWith("3") --> FAUX
    !chaine.startsWith("4") --> VRAI

    en gros ton test ne peut que renvoyer vrai

    je pense que tu peux trouver la solution maintenant

    EDIT : grilled

Discussions similaires

  1. method avec plusieurs attributs
    Par *alexandre* dans le forum JSF
    Réponses: 1
    Dernier message: 03/08/2006, 10h42
  2. Réponses: 2
    Dernier message: 04/06/2006, 21h11
  3. [Reflection] Retrouver une methode avec des parametres primitifs
    Par rozwel dans le forum API standards et tierces
    Réponses: 9
    Dernier message: 06/02/2006, 15h39
  4. [Compilateur] appel de méthodes avec signature similaire
    Par Monkeyget dans le forum Général Java
    Réponses: 4
    Dernier message: 30/03/2005, 20h14
  5. [C#][WebServices] Appel methode avec une classe en paramètre
    Par bran_noz dans le forum Windows Forms
    Réponses: 6
    Dernier message: 10/09/2004, 16h41

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