begin process at 2008 08 22 02:49:32
1 229 759 membres
30 nouveaux aujourd'hui
14 267 membres club

Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum.
Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

Sujet : Initialiser une matrice avec un fichier texte [ Algorithme / Maths ] (afalaze)

Initialiser une matrice avec un fichier texte le 10/01/2007 19:25:25

afalaze
Bonjour;
Je cherche à initialiser une matrice carrée à l'aide d'un fichier texte de la forme suivante
-------------- fichier.txt ---------------
3
L 1 2 3
L 1 2 5
L 0 4 9
------------------------------------------

La première ligne represente la dimension de la matrice carrée
Les lignes suivantes les valeurs de chaque ligne de la matrice, "L" pour signaler les lignes à traiter.
Voici le listing de Matrice.java :

------------------------------ Matrice.java --------------------------


import java.io.IOException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.BufferedReader;
import java.util.StringTokenizer;
import java.lang.Integer;

public class Matrice
{
    int[][] matrice;
    int  dimMatrice = 0;
   
    // Affichage du contenu de la matrice
    private void affichage(int dim)
    {
        for(int i=0; i<dim; i++)
        {
            for(int j=0; j<dim; j++)
            {
                System.out.print(matrice[i][j] +"\t");               
            }
            System.out.println();
        }
    }
   
    // Dimension du graphe
    public int getDimension()
    {
        return dimMatrice;
    }
   
    // Initialiser une matrice depuis un fichier texte
    public Matrice(String fichier) throws IOException
    {
        BufferedReader entree = new BufferedReader(new FileReader(fichier));
        int nbLigne = 0; //Compteur de boucle       
        String lignelue = null;
        while((lignelue = entree.readLine()) != null)
        {
            StringTokenizer tok = new StringTokenizer(lignelue, " ");               
            while(tok.hasMoreTokens())
            {
                if(nbLigne == 0)
                {
                    //dimMatrice = Integer.parseInt(lignelue);
                    dimMatrice = Integer.parseInt(tok.nextToken());
                    System.out.println("La dimension de la matrice : "+dimMatrice);
                    nbLigne++;
                }   
                else
                {   
                    matrice = new int[dimMatrice][dimMatrice];       
                    if(tok.nextToken() == "L")
                    {
                        tok.nextToken();
                    }
                    for(int j=0; j<dimMatrice; j++)
                    {
                        matrice[nbLigne-1][j] = Integer.parseInt(tok.nextToken());
                    }
                    nbLigne++;   
                }       
            }   
                   
        }       
        entree.close();
    }
   
    public static void main(String argc[]) throws IOException
    {
        System.out.println("Initialisation de la matrice");
        Matrice matrice = new Matrice("fichier.txt");
        matrice.affichage(matrice.getDimension());
    }
}

-------------------------------------------------------------------------------

A l'execution, j'obtien bien la dimension de la matrice mais celle celle-ci s'initialise mal à l'exception de la dernier ligne :

java matrice
Initialisation de la matrice
La dimension de la matrice : 3
0       0       0
0       0       0
0       4       9


Je pense que je me sert mal de la classe StringTokenizer
Aidez moi à y voire plus claire.
Merci
   

Re : Initialiser une matrice avec un fichier texte le 10/01/2007 20:46:14

kaloway
la comparaison d'une chaine de caractère ne se fait pas avec "==" mais avec equals.

exemple tok.nextToken().equals("L")

Re : Initialiser une matrice avec un fichier texte le 11/01/2007 01:27:09

afalaze
Merci koloway pour m'avoir repondu si vite.
J'ai bien essayé ta suggestion en remplaçant
if(tok.nextToken() == "L")
par
if(tok.nextToken().equals( "L"))

mais à l'execution j'ai le message suivant :
Initialisation de la matrice
La dimension de la matrice : 3
Exception in thread "main" java.util.NoSuchElementException
        at java.util.StringTokenizer.nextToken(StringTokenizer.java:332)
        at Matrice.<init>(Matrice.java:75)
        at Matrice.main(Matrice.java:88)
Press any key to continue...

En rectifiant "L" par 'L' :
if(tok.nextToken().equals( 'L'))
Je revien à la case départ c.a.d :
java matrice
Initialisation de la matrice
La dimension de la matrice : 3
0       0       0
0       0       0
0       4       9

Donc je ne comprend pas pourquoi la troisième ligne est traitée et non pas les 2 premières ?

Re : Initialiser une matrice avec un fichier texte le 11/01/2007 11:17:56

afalaze
Réponse acceptée !
Je vien de trouver la faille :
La matrice est écrasée à chaque passage dans le bloc else

else
                {   
                    matrice = new int[dimMatrice][dimMatrice];       
                    if(tok.nextToken() == "L") .....

Il suffit de remettre
matrice = new int[dimMatrice][dimMatrice]; dans le bloc if pour que la matrice soit créee une seule fois.

if(nbLigne == 0)
                {
                    //dimMatrice = Integer.parseInt(lignelue);
                    dimMatrice = Integer.parseInt(tok.nextToken());
                    System.out.println("La dimension de la matrice : "+dimMatrice);
                   
matrice = new int[dimMatrice][dimMatrice];   
                    nbLigne++;                  
                }   
                else
                {    ......

Ainsi à l'execution :

Initialisation de la matrice
La dimension de la matrice : 3
1       2       3
1       2       5
0       4       9
Press any key to continue...

Re : Initialiser une matrice avec un fichier texte le 29/03/2007 17:46:54

foutayeni
Bonsoir
est ce que t'as trouvé le problème ou pas encore?


Classé sous : fichier, java, int, matrice, dimmatrice

Participer à cet échange

Pub



Appels d'offres

CalendriCode

Août 2008
LMMJVSD
    123
45678910
11121314151617
18192021222324
25262728293031

VS Express FR Gratuit !

VS Express en français et 100% gratuit !

Téléchargements

Logiciels à télécharger sur le même thème :

Boutique

Boutique de goodies CodeS-SourceS