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

avec Java Discussion :

Truc bizzare aves les listes et une suites d'instances d'une classe


Sujet :

avec Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Femme Profil pro
    Étudiant
    Inscrit en
    Novembre 2008
    Messages
    143
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 35

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2008
    Messages : 143
    Par défaut Truc bizzare aves les listes et une suites d'instances d'une classe
    Bonjour a tous ,

    J'ai une classe appelé PrismRule () ,et j'ai creer une list de type Prism Rule et je vais ajouter a chaque fois une instance de Prism Rule et voila mon 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
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
     
     
     
    public List<PrismRule> CR = new ArrayList<PrismRule>();
     
      public void buildClassifier(Instances data) throws Exception {
     
     
                PrismRule CR_rules = addRule(null , new PrismRule(data, 0)); 
                System.out.println("Start build------------------");
                int cl=0; // possible value of theClass
                Instances E, ruleE;
                Test test = null, oldTest = null;
                int bestCorrect, bestCovers, attUsed;
                Enumeration enumAtt;
                getCapabilities().testWithFail(data); // can classifier handle the data?
                data = new Instances(data);
                data.deleteWithMissingClass();// remove instances with missing class
                E = data; // initialize E to the instance set
                ruleE = E; // examples covered by this rule
                test = new Test(); 
                CR_rules.m_test=test;
     
              // for every attribute not mentioned in the rule
                enumAtt = ruleE.enumerateAttributes();
                while (enumAtt.hasMoreElements()) 
                {
     
                     Attribute attr = (Attribute) enumAtt.nextElement();
                     if (isMentionedIn(attr, CR_rules.m_test)) {continue;}
                     int M = attr.numValues();
                     for (int val = 0; val < M; val ++) // ... for each value of this attribute
                     {
                              PrismRule cr = addRule(null , new PrismRule(data, 0));
                              Test Tst =new Test() ;
                              Tst.m_attr = attr.index();
                              Tst.m_val = val;
     
                              cr.m_test=Tst;
     
     
                              CR.add(cr); 
     
     
     
     
                     }
     
     
                }
     
     
     System.out.println("********************End build***************************");
     for(int i=0; i<CR.size(); i++)
     {  System.out.println("CR ["+i+"] == [ "+(CR.get(i)).toString()+" ]");
        CR_rules.m_next = CR.get(i) ;       }
     
        System.out.println("My rules are = "+CR_rules.toString()); 
     System.out.println("-------------------------------------------");
     
      }
    BTW la class PrismmRule a un champ appelé m_next qui est detype Prismrule il va pointer vers la classe suivante ce qui est bizarre c'est que la liste CR affiche toute les regles possible mes CR_rules n'as que la premiere et la derniere regles ???!!!!
    voila l'affichage

    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
    CR [0] == [ If length = long then True
     ]
    CR [1] == [ If length = small then True
     ]
    CR [2] == [ If length = medium then True
     ]
    CR [3] == [ If color = Red then True
     ]
    CR [4] == [ If color = Green then True
     ]
    CR [5] == [ If color = Blue then True
     ]
    CR [6] == [ If age = young then True
     ]
    CR [7] == [ If age = old then True
     ]
    CR [8] == [ If neighbors = 1 then True
     ]
    CR [9] == [ If neighbors = 2-to-4 then True
     ]
    CR [10] == [ If neighbors = 5-to-9 then True
     ]
    CR [11] == [ If neighbors = more-than-10 then True
     ]
    My rules are = If ? then True
    If neighbors = more-than-10 then True

  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,

    Ce que je vois, c'est que, par le code suivant, la variabke CR_rules.m_next contient la référence de la dernière régle de la liste CR ;

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    for(int i=0; i<CR.size(); i++)
     {  System.out.println("CR ["+i+"] == [ "+(CR.get(i)).toString()+" ]");
        CR_rules.m_next = CR.get(i) ;       }
     
        System.out.println("My rules are = "+CR_rules.toString()); 
     System.out.println("-------------------------------------------");
     
      }
    Tu aurais pu tout aussi bien écrire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    if ( !CR.isEmpty() ) {
        CR_rules.m_next = CR.get(CR.size()-1);
    }
    La première règle, c'est en fait CR_rules elle même : je suppose que toString() de PrismRule, ne fait qu'"afficher" la règle elle-même suivie de la règle m_next.
    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 chevronné

    Homme Profil pro
    Chomeur
    Inscrit en
    Juin 2006
    Messages
    347
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Chomeur

    Informations forums :
    Inscription : Juin 2006
    Messages : 347
    Par défaut
    Bonjour,

    la liste CR affiche toute les regles possible mes CR_rules n'as que la premiere et la derniere regles
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    for(int i=0; i<CR.size(); i++)
     {  System.out.println("CR ["+i+"] == [ "+(CR.get(i)).toString()+" ]");
        CR_rules.m_next = CR.get(i) ;       }
     
        System.out.println("My rules are = "+CR_rules.toString());
    Il me semble que CR_rules ne contient que la dernière règle et pas la première... Et cela semble cohérent avec le code ci-dessus, la boucle autour de CR permet l’affichage de toutes les règles, mais le contenu de CR_rules.m_next ne contiendra a la fin que la dernière occurrence...

    edit : grillé

  4. #4
    Membre confirmé
    Femme Profil pro
    Étudiant
    Inscrit en
    Novembre 2008
    Messages
    143
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 35

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2008
    Messages : 143
    Par défaut
    mais ce que je veux moi c'est de faire passer tous les éléments de CR dans CR-rules cad chaque élément de CR va etre associé a CR_rules et a la fin j'aurais dans CR_rules toutes les regles de CR , une pointe vers l 'autre ?

  5. #5
    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
    Soit tu affectes m_next pour chaque nouvelle règle créée dans ta boucle de création, avec une règle mémorisée lors lors de l'itération précédente (sauf pour la première règle créée).

    Soit tu le fais dans une seconde passe, sur la liste complète, à la fin, de cette manière :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    if ( CR.size()>1 ) { // il faut au moins 2 règles pour qu'il y ait un lien entre règles
       PrismRule previous = CR.get(0);
       for(int i=1; i<CR.size(); i++) { // on commence à la 2ème règle dans la liste (la première c'est previous);
          previous.m_next = CR.get(i); // la suivante de previous, c'est la règle courante de l'itération
          previous=previous.m_next; // la nouvelle règle qu'on va traiter l'itération suivante, est la suivante de celle qu'on vient de traiter.
       }
    }
    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.

  6. #6
    Membre confirmé
    Femme Profil pro
    Étudiant
    Inscrit en
    Novembre 2008
    Messages
    143
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 35

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2008
    Messages : 143
    Par défaut
    voila ce que j'ai fait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
     if ( CR.size()>1 ) { // il faut au moins 2 règles pour qu'il y ait un lien entre règles
       PrismRule previous = CR.get(0);
       for(int i=1; i<CR.size(); i++) { // on commence à la 2ème règle dans la liste (la première c'est previous);
          System.out.println("CR = "+CR.get(i).toString()); 
          previous.m_next = CR.get(i); // la suivante de previous, c'est la règle courante de l'itération
          previous=previous.m_next; // la nouvelle règle qu'on va traiter l'itération suivante, est la suivante de celle qu'on vient de traiter.
       }
        System.out.println("My rules are = "+previous.toString()); 
    }
    voila le resultat :
    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
     
     
    CR = If length = long then True
     
    CR = If length = small then True
     
    CR = If length = medium then True
     
    CR = If color = Red then True
     
    CR = If color = Green then True
     
    CR = If color = Blue then True
     
    CR = If age = young then True
     
    CR = If age = old then True
     
    CR = If neighbors = 1 then True
     
    CR = If neighbors = 2-to-4 then True
     
    CR = If neighbors = 5-to-9 then True
     
    CR = If neighbors = more-than-10 then True
     
    My rules are = If neighbors = more-than-10 then True
    previous tjr a que la dernière regle !!!

  7. #7
    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
    Mais ce n'est pas :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    System.out.println("My rules are = "+previous.toString());
    que tu dois écrire pour afficher CR_rules

    mais

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    System.out.println("My rules are = "+CR_rules);
    J'ai enlevé le .toString() parce qu'il est implicite dans ce cas : il n'est pas utile de le mettre.

    CR_rules et CR.get(0) sont la même règle, mais à la fin de la boucle previous est la dernière règle.
    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.

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 27/01/2011, 09h40
  2. Réponses: 2
    Dernier message: 30/06/2010, 17h52
  3. afficher une suite de nombres dans une string
    Par hysah dans le forum C++
    Réponses: 4
    Dernier message: 27/04/2006, 18h51
  4. transcrire une chaine de caractères en une suite d'entiers
    Par marineaure dans le forum Débuter avec Java
    Réponses: 2
    Dernier message: 03/04/2006, 16h32
  5. Réponses: 1
    Dernier message: 22/02/2006, 09h02

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