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 :

problème d'édition de lien entre classe ou mauvaise utilisation de Vector


Sujet :

Langage Java

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2009
    Messages : 13
    Points : 8
    Points
    8
    Par défaut problème d'édition de lien entre classe ou mauvaise utilisation de Vector
    Bonjour,
    Dans le cadre d'un projet pou mon cours d'algorithmique, je dois créer un programme en java manipulant un graphe. Celui-ci, est composé de nœuds et d'arcs. Pour représenter une telle structure, j'utilise 3 classes, une classe Graphe, une classe Nœud et une Classe Arc.
    Je ne suis pas familier avec le langage Java, on nous laisse nous débrouiller pour arriver au résultat demandé. Je rencontre un problème, qui d'après mon expérience en C++, me fait penser à un soucis d'édition de liens entre mes classe Noeud et Arc.


    voici ma classe Arc dans l'état actuel :
    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
    import java.lang.*;
    import java.util.Vector;
    public class Arc
    {
    	// méthodes et fonctions
    	public static void main ( String[] args )
    	{
    		
    	}
    
    	public Arc ()
    	{
    		poids_ = 0;
    	}
    	
    	public Arc ( Noeud d, Noeud f, int p)
    	{
    		poids_ = p;
    		debut_ = d;
    		fin_ = f;
    	}
    	
    	public int poids ()
    	{
    		return poids_;
    	}
    	
    	public Noeud debut ()
    	{
    		return debut_;
    	}
    	
    	public Noeud fin ()
    	{
    		return fin_;
    	}
    	
    	// variables
    	private int poids_;
    	private Noeud debut_;
    	private Noeud fin_;
    }
    La classe Nœud possède un tableau de type Arc dont chaque "case du tableau" contient un arc.
    voici la classe Noeud que j'essaie d'écrire en ce moment :
    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
    import java.lang.*;
    import java.util.Vector;
    public class Noeud
    {
    	// méthodes et fonctions
    	public static void main ()
    	{
    		
    	}
    	
    	public Noeud()
    	{
    		capacite_ = 0;
    	}
    	public Noeud(int c)
    	{
    		capacite_ = c;
    	}
    	public void arcVersSuivant (Noeud suivant, int p)
    	{
    		arcs[0].addElement(new Arc (this, suivant, p));
    	}
    	
    	public Noeud successeur (int i)
    	{
    		return arcs[i].fin();
    	}
    	
    	// variables
    	private Vector<Arc> [] arcs;
    	private int capacite_;
    }
    lorsque que compile le code, j'ai ceci comme erreur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    Noeud.java:27: cannot find symbol
    symbol  : method fin()
    location: class java.util.Vector<Arc>
    		return arcs[i].fin();
    		              ^
    1 error
    Je ne comprend pas pourquoi dans ma classe Noeud, le compilateur ne trouve pas de lien vers la méthode fin () de ma classe Arc ( j'ai souligné et mis en rouge ces deux passages ).
    Dès lors, je me pose deux questions : soit il me manque quelque chose au niveau de l'édition des liens, soit j'utilise mal la classe Vector de java.
    Je n'ai pas trouvé la réponse, c'est pourquoi j'aimerai savoir si quelqu'un aurait la gentillesse de m'éclairer.

    je précise aussi que je travail sous fedora10.

    merci d'avance de votre aide

  2. #2
    Membre éprouvé
    Avatar de hasalex
    Homme Profil pro
    Développeur Java
    Inscrit en
    Janvier 2009
    Messages
    879
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Janvier 2009
    Messages : 879
    Points : 1 269
    Points
    1 269
    Par défaut
    arcs[i].fin()
    arcs est un tableau de Vector, donc arcs[i] est un objet de type Vector, il n'a donc pas de méthode fin.

    Petites remarques annexes :
    - Pas besoin de import java.lang.*
    - Pourquoi Vector ? On conseille plutôt Collection ou List pour la déclaration et ArrayList pour l'instanciation.
    - Les champs se déclarent en début de classe, puis les constructeurs, puis les méthodes.

  3. #3
    Membre éclairé Avatar de Heimdal
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    549
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 549
    Points : 718
    Points
    718
    Par défaut
    Salut,
    ici tu déclares un tableau de Vector:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    private Vector<Arc> [] arcs;
    ainsi lorsque tu fais arcs[i] ca te renvoie un Vector<Arc> qui ne possède pas la méthode fin().
    De manière générale la classe Vector est déconseillé.
    Je te conseille d'utiliser soit un simple tableau
    soit une Arraylist qui te fournira un ensemble de méthodes pouvant te simplifier la tache.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    private List<Arc> arcs;
    attention à l'impact sur la méthode arcVersSuivant (Noeud suivant, int p)

    Banzai

  4. #4
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2009
    Messages : 13
    Points : 8
    Points
    8
    Par défaut
    Notre assistant nous a conseillé d'utiliser la classe Vector pour que l'on puisse gérer un tableau de taille variable.

    je pensais que déclarer mon tableau ainsi
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    private Vector<Arc> [] arcs;
    permettait d'avoir un tableau d' Arc à la manière des template en C++. Je suppose que ce n'est pas la même chose en java, ai-je tord ?



    effectivement, il manque des instruction à ma méthode arcVersSuivant (Noeud suivant, int p)

  5. #5
    Membre éclairé Avatar de Heimdal
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    549
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 549
    Points : 718
    Points
    718
    Par défaut
    je pensais que déclarer mon tableau ainsi

    private Vector<Arc> [] arcs;

    permettait d'avoir un tableau d' Arc à la manière des template en C++. Je suppose que ce n'est pas la même chose en java, ai-je tord ?
    Ta déclaration indique que tu as un tableau de Vector d'Arc. Je ne pourrais te dire si c'est ou ce n'est pas la même chose que les templates en C++ étant un newbie dans ce langage.

    Pour revenir à ton problème, il y a beaucoup d'autres objets java que Vector permettant de gérer des tableaux dynamique.
    Entre autres les différentes implémentations de List, Set et Map et qui elles ne sont pas déconseillées.
    Un ArrayList sera sans doute très bien adapté.

    Une tite question/remarque pour compléter ce qu'écrivait justement hasalex:
    pourquoi y a t il des méthodes public static void main ( String[] args ) dans tes classes Arc et Noeud?

  6. #6
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2009
    Messages : 13
    Points : 8
    Points
    8
    Par défaut
    si j'utilise
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    private List<Arc> arcs;
    je ne risque pas d'être dans la même situation qu'avec le Vector ?

    je ne sais pas trop pourquoi j'ai mis des fonctions main dans mes deux autres classe. c'est le premier code que j'écris en java et dans le pu d'explication que j'ai eu lors du cours, le prof disait qu'on trouvait des fonctions main dans les classes. donc j'en ai placé dans les mienne même si elle ne servent à rien pour l'instant

  7. #7
    Membre éclairé Avatar de Heimdal
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    549
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 549
    Points : 718
    Points
    718
    Par défaut
    Pour t'aider un peu voici la classe noeud en utilisant un ArrayList. N'hesites pas regarder la javadoc. C'est dans l'ensemble très clair.

    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
    public class Noeud {
     
    	private List<Arc> arcs;
    	private int capacite_;
     
    	public Noeud()
    	{
    		this(0);
    	}
     
    	public Noeud(int c)
    	{
    		capacite_ = c;
                    arcs = new ArrayList<Arc>();
    	}
    	public void arcVersSuivant (Noeud suivant, int p)
    	{
    		arcs.add(new Arc(this, suivant, p));
    	}
     
    	public Noeud successeur (int i)
    	{
    		return arcs.get(i).fin();
    	}
     
    }
    Je pense qu'au niveau de la conception c'est un peu tordu, m'enfin c'est en forgeant qu'on devient forgeron.
    en espérant que ca t'eclaire sur l'utilisation des collections.
    Banzai

  8. #8
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2009
    Messages : 13
    Points : 8
    Points
    8
    Par défaut
    merci, j'y vois déjà un peu plus clair

Discussions similaires

  1. [MASM32] Problème à l'édition de liens
    Par theShin dans le forum x86 32-bits / 64-bits
    Réponses: 4
    Dernier message: 01/03/2007, 21h38
  2. Problème d'édition de lien
    Par Kodamas dans le forum Autres éditeurs
    Réponses: 10
    Dernier message: 05/06/2006, 13h50
  3. [g++] Problème d'édition de liens
    Par glKabuto dans le forum Autres éditeurs
    Réponses: 3
    Dernier message: 31/05/2006, 19h10
  4. [Dev-C++] Problème d'édition des liens
    Par shura dans le forum EDI
    Réponses: 5
    Dernier message: 30/08/2005, 09h35
  5. Problème à l'édition des liens avec BCC55 et Xerces
    Par ShootDX dans le forum Autres éditeurs
    Réponses: 4
    Dernier message: 30/11/2003, 14h50

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