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 :

Aide dictionnaire de methodes Java


Sujet :

avec Java

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2016
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Décembre 2016
    Messages : 3
    Points : 1
    Points
    1
    Par défaut Aide dictionnaire de methodes Java
    Bonjour a tous, je prefere le preciser des a present, mon clavier n'etant pas francais il n'y aura pas d'accent dans le message que je poste

    Tres rapidement le probleme: j'ai deux methodes nommees "noeud" et "connexion" ; le but de ces deux methodes est de creer un reseau de noeuds, d'ou "noeud" qui cree un noeud (en lui attribuant un numero et un nom) et "connexion" qui definit les connexions du noeud en question. (le tout compris dans une seule classe)

    J'ai donc deux questions:

    1st question: Comment je peux faire en sorte d'avoir toujours une paire Noeud/Connexion unique pour mon reseau sachant que j'ai plusieurs noeuds ?

    Mon idee (je ne sais pas si elle est bonne mais elle n'est pas elegante): ajouter un parametre pour chacune de ces methodes ainsi:
    public void Noeud(int numeroCouple)
    public void Connexion(int numeroCouple)

    Et pour chaque couple Noeud/Connexion j'attribue un "numeroCouple" unique, ainsi je saurais "matcher" chaque couple. Le probleme de cette idee c'est que certes j'ai forme un couple, mais je ne peux pas les identifier correctement, c'est-a-dire les appeler de maniere simple.

    2nd question: Je dois initialiser mon reseau avec un nombre fixe de noeud a l'interieur (je vous passe les details, je simplifie meme le probleme je generaliserais de mon cote). Je dois initialiser (donc creer) plusieurs reseaux, disons 5 reseaux. En soi, initialiser un reseau c'est simple, sauf que je ne vois pas trop comment sauvegarder chaque reseau a chaque nouvelle initialisation, d'ou mon idee de dictionnaire.

    Je ne suis pas trop cale sur ce sujet mais j'aurais bien aime faire un truc du style:

    key = 1 <-> 1st reseau
    key = 2 <-> 2nd reseau
    et ainsi de suite jusqu'au 5eme. Je sais qu'il y a une methode Hash ou quelque chose comme ca en Java, mais je ne vois pas du tout comment l'associer a mon cas. Surtout que key 1 doit en realite etre relie au fameux couple Noeud/Connexion donc c'est un peu comme si j'avais deux element a lier a une clef, ce qui est encore plus difficile a saisir pour moi..


    Dans tous les cas je serais reconnaissant a quiconque me guidera dans ma demarche (et qui aura eu le courage de lire ce texte sans aucun accent..). Je suis ouvert a toute proposition, creer une autre classe, changer les methodes etc.. La seule restriction que je m'impose c'est d'avoir une distinction entre les noeuds et les connexions et donc de ne pas melanger le tout.

    Cordialement,

  2. #2
    Membre expérimenté Avatar de Nico02
    Homme Profil pro
    Developpeur Java/JEE
    Inscrit en
    Février 2011
    Messages
    728
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Developpeur Java/JEE
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2011
    Messages : 728
    Points : 1 622
    Points
    1 622
    Par défaut
    Salut,

    Bon déjà je pense qu'il va te falloir revoir un peu ton architecture. C'est jamais bon de tout mettre dans une seule classe.

    Si tu dis qu'une classe Reseau contient une liste d'instances d'une classe Noeud qui contient elle même un liste d'instances d'une classe Connexion, tout devient beaucoup plus clair.

    Il ne te reste plus qu'à faire une liste de réseau et tout y est

    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
     
      class Reseau
      {
        String nom;
        List<Noeud> listNoeud;
     
        // Getter/Setter
      }
     
      class Noeud
      {
        String nom;
        int id;
        List<Connexion> listConnexion;
     
        // Getter/Setter
      }
     
      class Connexion
      {
        String nom;
     
        // Getter/Setter
      }
    Pour assurer l'unicité, entre tes noeuds et tes connexions, le plus simple est d'utiliser la méthode contains() fournie par l'interface List.

    L'idée c’est que avant d'insérer un noeud dans ton réseau ou une nouvelle connexion dans un noeud, tu vas tester si elle existe déjà.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
      class Reseau
      {
        String nom;
        List<Noeud> listNoeud;
     
        public void ajouterNoeud( Noeud noeud )
        {
          if( listNoeud.contains( noeud ) )
            throw new IllegalArgumentException( "Le noeud existe déjà sur le réseau" );
     
          listNoeud.add( noeud );
        }
      }
    Mais en l'état ce code ne marchera pas. En effet la méthode contains(), par défaut va tester l'égalité suivante

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    o==null ? e==null : o.equals(e);
    Sauf que par défaut, la méthode equals() de n'importe quelle classe va retourner son adresse mémoire. Or c'est pas vraiment ce qu'on veut tester.

    Dans ce cas on n'a plus qu'a redéfinir lé méthode equals() de la classe Noeud !

    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
     
    class Noeud
    {
    String nom;
    int  id;
     
    List<Connexion> listConnexion;
     
    	@Override
    	public boolean equals( Object o )
    	{
    		if( o instanceof Noeud )// c'est une précaution, dans un cas général on ne sait pas quel type d'objet on peut recevoir ici
    		{
    			Noeud n = (Noeud)o;
    			return n.getId() == this.getId() && n.getNom().equals(  this.getNom() );
    		}
    		else
    			return false;
     
    	}
    }
    Il ne reste plus qu'à faire pareil pour l'insertion de tes connexion dans tes noeuds.

    Pour rechercher une connexion en particulier dans un noeud en particulier, tu n'as qu'à parcourir tes listes, ce qui peut s'écrire facilement.

    Il y a d'autre solution comme l'utilisation d'un Set à la place d'une List qui assure l'unicité de la collection. Je te laisse regarder si ça t’intéresse.

    Cdt.

  3. #3
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2016
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Décembre 2016
    Messages : 3
    Points : 1
    Points
    1
    Par défaut
    Merci pour cette réponse Nico (oui je viens de passer sur mon ordi, d'où les accents )

    Je vais analyser ça de plus près ce soir j'espère, ou demain. Je reviendrais ici pour dire ce qu'il en est !

  4. #4
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2016
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Décembre 2016
    Messages : 3
    Points : 1
    Points
    1
    Par défaut
    Bonsoir,

    Bon, dans l'ensemble le principe proposé est clair. J'essaie donc de faire une fonction main, histoire de m'entraîner et de créer un petit réseau, le voici ci-dessous:

    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 class NeuralNetwork {
     
    	public static void main(String[] args) {
     
    		Network network = new Network();
     
    		Node node1 = new Node();
    		node1.setId(1);
     
    		network.addNode(node1);
     
    		Node node2 = new Node();
    		node2.setId(2);
     
    		network.addNode(node2);
     
    		System.out.println(network.getListNode());
    	}
    }
    Et la classe Network:

    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
     
    public class Network {
     
        int id;
        private List<Node> listNode;
     
        // Getter/Setter
     
     
        public void addNode(Node node){
     
            listNode.add(node);
        }
     
        public List<Node> getListNode() {
     
            return listNode;
        }
     
        public void setListNode(List<Node> listNode) {
     
            this.listNode = listNode;
        }
     
    }
    Évidemment ça ne fonctionne pas (NullPointerException), du coup je me demande si "listNode" a été instanciée dans la classe Network. Dans mon main j'ajoute des nodes mais à aucun moment je n'ai instancié une liste de noeuds (un truc du style new list<Node>() ) j'ai tenté des trucs mais en vain, et du coup je suppose que c'est le même problème avec les connexions.

    Encore merci d'avance

  5. #5
    Membre éprouvé
    Avatar de Cafeinoman
    Homme Profil pro
    Couteau suisse d'une PME
    Inscrit en
    Octobre 2012
    Messages
    628
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Couteau suisse d'une PME

    Informations forums :
    Inscription : Octobre 2012
    Messages : 628
    Points : 1 256
    Points
    1 256
    Par défaut
    Euh

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    public Network(){
      listNode = new ArrayList<>();
    }
    devrait suffir. Quand tu as une collection dans un champs comme ca, tu l'initialise dans ton constructeur vide, comme ca tu est sur qu'elle n'est jamais vide... Et si tu veux par exemple un contructeur qui prenne l'id

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    public Network(int id){
      this();
      this.id = id;
    }
    comme ca tu appel ton constructeur vide qui initialise ta liste.
    «Dieu ne joue pas aux dés.» - Albert Einstein. Et pan! 30 ans de retard dans la théorie quantique!
    «Tout n'est pas politique, mais la politique s'intéresse à tout.» - Nicolas Machiavel. Et surtout à ceux qui ne s'y intéressent pas.

Discussions similaires

  1. exécuter une classe dans un jar a partir d'une methode java
    Par yann_p dans le forum API standards et tierces
    Réponses: 13
    Dernier message: 13/04/2006, 16h50
  2. [javadoc] Aide Javadoc des packages java non permanente
    Par newfsch dans le forum Eclipse Java
    Réponses: 3
    Dernier message: 30/11/2005, 00h15
  3. [Applet] appel de methodes java en javascript
    Par soulhouf dans le forum Applets
    Réponses: 16
    Dernier message: 06/09/2005, 15h18
  4. [Reflection] Interpreter une chaine en une methode java
    Par shaun_the_sheep dans le forum API standards et tierces
    Réponses: 6
    Dernier message: 09/10/2004, 16h11
  5. [Crypto] Besoin d'aide de cryptage en java
    Par djyb2003 dans le forum Sécurité
    Réponses: 3
    Dernier message: 08/03/2004, 19h13

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