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

Java Discussion :

Implémentation d'une matrice carré avec Vector


Sujet :

Java

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    36
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 36
    Points : 15
    Points
    15
    Par défaut Implémentation d'une matrice carré avec Vector
    Bonjour à tous,

    Comme écris dans le titre, je suis en train d'ecrire une classe de matrice en utilisant l'object Vector, dont voici les sources:

    L'interface à implémenter:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    public interface Matrice{
     
        //public int[][] getMatrice(); // return a new object
        //public int getLignes(); 
        //public int getColonnes();
        public void insertData(int no_ligne, int no_colonne, int donnee);
        //public int getData(int no_ligne, int colonne);
        public void printMatrice();
        // public void printColonne(int no_colonne);
        //public void printLigne(int no_ligne);
     
    }
    L'implémentation :

    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
     
    import java.util.*;
     
    public class Vecteur implements Matrice{
        private Vector vect;
        private int lignes;
        private int colonnes;
     
        public Vecteur(){
    	this.vect = new Vector();
    	this.lignes = 0;
    	this.colonnes = 0;
        }
     
        private void agrandirVect(int size){
    	for(int i=lignes; i <= size ; i++)
    	    this.vect.insertElementAt(new Vector(), i);
    	this.lignes = size;
        }
     
        public void insertData(int no_ligne, int no_colonne, int donnee){
    	if(no_ligne >= lignes)
    	    this.agrandirVect(no_ligne);
    	Vector tmp = (Vector)vect.elementAt(no_ligne);
    	tmp.insertElementAt(donnee, no_colonne);
        }
     
        public void printMatrice(){
    	int col;
    	Vector tmp;
    	for(int i=0; i < vect.size(); i++){
    	    tmp =(Vector)vect.elementAt(i);
    	    col = tmp.size();
    	    for(int j=0; j < colonnes; j++)
    		System.out.print(tmp.elementAt(j)+" ");
    	    System.out.println();
    	}
        }
    }
    Ainsi que le programme 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
     
    public class Test{
     
        public static void main(String[] args){
    	Matrice mat = new Vecteur();
     
    	for(int i=0; i<5; i++)
    	    for(int j=0; j<5; j++)
    		mat.insertData(i,j, i+j);
     
    	mat.printMatrice();
        }
    }
    Voila ce que j'obtiens comme erreur à l'exécution:

    Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 1 > 0
    at java.util.Vector.insertElementAt(Vector.java:558)
    at Vecteur.insertData(Vecteur.java:24)
    at Test.main(Test.java:8)

    J'arrive pas à voir pour quoi j'ai cette ArrayIndexOutOfBounds ...

    Vous avez une idée ?

    Merci d'avance

  2. #2
    Modérateur
    Avatar de dinobogan
    Homme Profil pro
    ingénieur
    Inscrit en
    Juin 2007
    Messages
    4 073
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations professionnelles :
    Activité : ingénieur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 4 073
    Points : 7 163
    Points
    7 163
    Par défaut
    Lit la javadoc de Vector pour la méthode "insertElementAt" et tu comprendras tout de suite ;-)

    Et si tu n'as pas besoin de synchronisation bas niveau, utilise plutôt des ArrayList.
    Enfin, inutile de conserver "lignes" et "colonnes", car tu les retrouves quand tu veux. Autant éviter un risque de désynchro entre ces variables et la réalité.

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    36
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 36
    Points : 15
    Points
    15
    Par défaut
    J'ai bien vu que cette méthode nécessite des objet, mais j'ai effectuer des test en insérant des types primitif et cela fonctionne aussi, l'erreur semble venir d'ailleurs parce que même avec des wrappers comme Integer ça fait pareille...

    Autrement, c'est une excellente remarque pour lignes et colonnes, c'est vrai qu'il servent a rien.

    Je te remercie pour ta contribution

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    36
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 36
    Points : 15
    Points
    15
    Par défaut
    Je viens d'enlever les 2 variables de classes lignes et colonnes et je n'ai étrangement plus ce problème ...

  5. #5
    Modérateur
    Avatar de dinobogan
    Homme Profil pro
    ingénieur
    Inscrit en
    Juin 2007
    Messages
    4 073
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations professionnelles :
    Activité : ingénieur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 4 073
    Points : 7 163
    Points
    7 163
    Par défaut
    Citation Envoyé par tagsOf Voir le message
    Je viens d'enlever les 2 variables de classes lignes et colonnes et je n'ai étrangement plus ce problème ...
    Rien d'étrange : dans ta fonction "agrandirVect", tu faisais "this.lignes = size" au lieu de "this.lignes = vect.size()". Du coup, tu avais une désynchro entre "lignes" et la taille effective de ton Vector. Si ça c'est pas de la prémonition

    Ensuite, tu n'as pas compris ce que j'ai dit juste avant à propos de la javadoc. Je te parlais de ça
    ArrayIndexOutOfBoundsException - if the index is out of range (index < 0 || index > size())
    L'index que tu transmettais étais trop grand. Enfin, maintenant ça marche, tant mieux

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    36
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 36
    Points : 15
    Points
    15
    Par défaut
    Merci pour ces precisions !

    Petite question existe t-il dans vector une methode qui permet non pas de savoir si le vecteur est vide, mais si l'indice i ne référence aucun objet, je m'explique avec un exemple:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
     
    int donnee = 5;
     
    Vector vext = new Vector();
     
    vext.insertElementAt( donnee, 2);
     
    /*-- j'ai appelée cette methode isEmptyAt à titre d'exemple --*/
     
    vext.isEmptyAt( 2 ); //-->Ici la methode me renverrait un false
    vext.isEmptyAt( 0 ); //-->Ici un true
    Merci encore

  7. #7
    Modérateur
    Avatar de dinobogan
    Homme Profil pro
    ingénieur
    Inscrit en
    Juin 2007
    Messages
    4 073
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations professionnelles :
    Activité : ingénieur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 4 073
    Points : 7 163
    Points
    7 163
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    boolean isEmptyAt( int index )
    {
      return index >= vector.size() || vector.get( index ) == null;
    }

Discussions similaires

  1. Création d'une matrice carrée avec SQL et parcours de table SQL server
    Par ismahane.silhadi dans le forum Développement
    Réponses: 4
    Dernier message: 03/12/2014, 15h07
  2. [VB6]Colorier une zone (carrée) avec l'objet printer.
    Par méphistopheles dans le forum VB 6 et antérieur
    Réponses: 14
    Dernier message: 24/05/2006, 21h03
  3. Afficher une matrice 3d avec OpenGl
    Par kmaniche dans le forum OpenGL
    Réponses: 9
    Dernier message: 03/02/2006, 13h21
  4. Sous matrice carrée d'une matrice carrée
    Par devils55 dans le forum C++
    Réponses: 2
    Dernier message: 13/11/2005, 19h07
  5. Initialisation d'une matrice carrée (malloc...)
    Par kilinette dans le forum C
    Réponses: 4
    Dernier message: 17/10/2005, 19h57

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