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

C# Discussion :

Condition if non pris en considération


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé
    Inscrit en
    Août 2008
    Messages
    1 596
    Détails du profil
    Informations forums :
    Inscription : Août 2008
    Messages : 1 596
    Par défaut Condition if non pris en considération
    Bonjour, j'ai créer une fonction qui me retourne soit 1 soit 0selon l'existence des parametres passés, cette fonction test s'il y a intersection ou inclusion entre les paramètres passés et les ligne d'une table :

    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
            public int isExist(int SN, int EN, char design)
            {
                int exist = 0;
     
                for (int i = 0; i < this.Count; i++)
                {
                    if (((SN <= this[i].EndNumber && SN >= this[i].StartNumber) ||
                        (EN <= this[i].EndNumber && EN >= this[i].StartNumber) ||
                        (this[i].StartNumber <= EN && this[i].StartNumber >= SN) ||
                        (this[i].EndNumber <= EN && this[i].EndNumber >= SN)) && this[i].Design.Equals(design))
                    {
                        exist = 1;
                    }
                }
                return exist;
            }
    le problème c'est que cette fonction ne prend pas la derniere condition en considération :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    && this[i].Design.Equals(design)
    par exemple : si je donne : D 1 500 et dans la table il ya S 1 500, la fonction doit me retourné 0, ce qui permet d'insérer dans la table car S 1 500 # D 1 500, que pensez vous ?

  2. #2
    Membre Expert Avatar de Guulh
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    2 160
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2007
    Messages : 2 160
    Par défaut
    Citation Envoyé par Msysteme Voir le message
    que pensez vous ?
    Que quand on a un if aussi maousse, on a intérêt à le découper

    Du style
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    if (gros machin de la mort avec des || de partout)
      if (autre gros bidule)
        ....
    Aussi, passe ton code en pas à pas, sélectionne une expression, rajoute un espion dessus, et tu verras sa valeur (ici true ou false) dans la fenêtre d'espion.

  3. #3
    Expert confirmé Avatar de Graffito
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    5 993
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 993
    Par défaut
    if (le gros machin de la mort avec les || de partout)
    exist=this[i].Design.Equals(design))?1:0 ;
    et verifier en debug!

  4. #4
    Expert confirmé

    Avatar de Philippe Vialatte
    Homme Profil pro
    Architecte technique
    Inscrit en
    Juillet 2004
    Messages
    3 029
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juillet 2004
    Messages : 3 029
    Par défaut
    +1

    Sinon, moi, ton :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     for (int i = 0; i < this.Count; i++) {
                    if ((this[i].EndNumber >= SN && SN >= this[i].StartNumber) ||
                         (this[i].EndNumber >= EN && EN >= this[i].StartNumber) ||
                         (EN >= this[i].StartNumber && this[i].StartNumber >= SN) ||
                         (EN >= this[i].EndNumber && this[i].EndNumber >= SN))
     
                        return this[i].Design.Equals(design) ? 1 : 0;
                }
    J'ajouterais une fonction, genre IsInBetween
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    private bool IsInBetween (int val, int min, int max){
    return min <= val&& val<= max;
    }
    et ca ferait du :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     for (int i = 0; i < this.Count; i++) {
                    if (IsInBetween(SN , this[i].StartNumber, this[i].EndNumber) ||
                       IsInBetween(EN , this[i].StartNumber, this[i].EndNumber) ||
                       IsInBetween(this[i].StartNumber, SN, EN) ||
                       IsInBetween(this[i].EndNumber , SN, EN))
                        return this[i].Design.Equals(design) ? 1 : 0;
                }

    Mon Blog

    The Cake is still a lie !!!



    Vous voulez contribuer à la rubrique .NET ? Contactez-moi par MP.
    Vous voulez rédiger des articles pour la rubrique .NET ? Voici la procédure à suivre.

  5. #5
    Expert confirmé Avatar de Graffito
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    5 993
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 993
    Par défaut
    -1
    return this[i].Design.Equals(design) ? 1 : 0;
    pas de return si 0, il faut continuer la boucle

  6. #6
    Expert confirmé

    Avatar de Philippe Vialatte
    Homme Profil pro
    Architecte technique
    Inscrit en
    Juillet 2004
    Messages
    3 029
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juillet 2004
    Messages : 3 029
    Par défaut
    Citation Envoyé par Graffito Voir le message
    -1

    pas de return si 0, il faut continuer la boucle
    Vi, c'est vrai (pas vu )

    Ceci dit ,cui-la :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    if (le gros machin de la mort avec les || de partout)
    exist=this[i].Design.Equals(design))?1:0 ;
    il est faux aussi

    Mon Blog

    The Cake is still a lie !!!



    Vous voulez contribuer à la rubrique .NET ? Contactez-moi par MP.
    Vous voulez rédiger des articles pour la rubrique .NET ? Voici la procédure à suivre.

  7. #7
    Membre éprouvé
    Inscrit en
    Août 2008
    Messages
    1 596
    Détails du profil
    Informations forums :
    Inscription : Août 2008
    Messages : 1 596
    Par défaut
    Mais normalement je dois vérifier si this[i].Design.Equals(design)) si oui je fais le test sinon j'incremente ma boucle, parce que si la ligne a controlé n'a pas la meme designation que celle dans la table je dois pas faire de test ?

    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
    public int isExist(int SN, int EN, char design)
            {
                int exist = 0;
     
                for (int i = 0; i < this.Count; i++)
                {
                    Console.WriteLine("Design " + this[i].Design + " EN " + this[i].EndNumber);
                    if (design.Equals(this[i].Design))
                    {
     
                        if (((SN <= this[i].EndNumber && SN >= this[i].StartNumber) ||
                            (EN <= this[i].EndNumber && EN >= this[i].StartNumber) ||
                            (this[i].StartNumber <= EN && this[i].StartNumber >= SN) ||
                            (this[i].EndNumber <= EN && this[i].EndNumber >= SN)))
                        {
                            exist = 1;
                        }
                    }
                    else
                        i++;
                }
                return exist;
            }
    Mais meme celle la ne donne pas de bons résultat ?

  8. #8
    Inactif  
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Janvier 2007
    Messages
    6 604
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Janvier 2007
    Messages : 6 604
    Par défaut
    Citation Envoyé par Msysteme Voir le message
    Bonjour, j'ai créer une fonction qui me retourne soit 1 soit 0selon l'existence des parametres passés,
    Les booléens te posent un problème de conscience ?

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

Discussions similaires

  1. [CSS] style externe non pris en charge
    Par ravNin'- dans le forum Mise en page CSS
    Réponses: 21
    Dernier message: 26/10/2005, 00h22
  2. Accents non pris en compte dans les requêtes SELECT
    Par YanK dans le forum Requêtes
    Réponses: 1
    Dernier message: 30/08/2005, 10h57
  3. [event] keyListener non pris en compte
    Par pierre.zelb dans le forum Agents de placement/Fenêtres
    Réponses: 5
    Dernier message: 03/08/2005, 08h35
  4. Réponses: 4
    Dernier message: 01/07/2005, 16h20
  5. [StringBuffer] Texte non pris en entier
    Par GLDavid dans le forum Collection et Stream
    Réponses: 6
    Dernier message: 07/05/2004, 16h37

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