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)

mercredi 10 janvier 2007 à 19:25:25 | Initialiser une matrice avec un fichier texte

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
   

mercredi 10 janvier 2007 à 20:46:14 | Re : Initialiser une matrice avec un fichier texte

kaloway

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

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

jeudi 11 janvier 2007 à 01:27:09 | Re : Initialiser une matrice avec un fichier texte

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 ?

jeudi 11 janvier 2007 à 11:17:56 | Re : Initialiser une matrice avec un fichier texte

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...

jeudi 29 mars 2007 à 17:46:54 | Re : Initialiser une matrice avec un fichier texte

foutayeni

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



Cette discussion est classé dans : fichier, java, int, matrice, dimmatrice


Répondre à ce message

Sujets en rapport avec ce message

Creer un lien entre deux fichiers [ par Tom89 ] Bonjour,Je suis dsl de poser une question aussi triviale mais je n'arrive pas à trouver de réponses dans les tutorials.J'ai deux fichiers Tableaux.jav matlab_java [ par nicaiseeric ] Bonjour à tous,S'il vous plait, j'aimerais avoir de l'aide sur le sujet suivant:" j'ai utiliser pour créer un package et un fichier .jar à partir d'u enregistrer un fichier en java [ par lasscam ] Bonjour tt le monde,Voila, je suis confronté à un problème, je veux donner la possibilité d'un utilisateur quelconque de mon application d'indiquer le lire et ecrire dans fichier texte en java [ par saif87 ] Bonjour,je veut une aide a propos des fichier en java je veut sauvegarder mon travail dans un fichierexemple l'utilisateur entre le nom ,prénom,age... fichier en java [ par saif87 ] Bonjour,est ce que les nombres(entier,double.....)stockée dans un fichier txt dans un programme java seront des caractère spéciale au contraire des St detecter materiel sous linux en java [ par khaledinfor ] salut..il y'a des problemes  sous linux :1-> comment detecter un imprimante sous java(l'imprimante et placer au non )2-> Comment imprimer un fichier p Parser un fichier text en java (tokens) [ par theunknown0o ] Bonjour,j'aimerai avoir un code qui pourrait parser en java un fichier texte le texte: ligne 1==> ab=X cd=Y ef=Zj'aimerai avoir a la fin ke les valeur lire et écrire une matrice ligne par ligne dans un fichier texte en java [ par hibaw ] bonjour a tous,je cherche comment  dans un code_source je dois écrire (c à dire enregistrer) une matrice de réel exemple : mat =[ 0   1.2   3    4;    fichier .bat et java [ par adiaby ] j'aimerais savoir comment créer et executer un fichier .bat dans un programme java


Nos sponsors

Sondage...

CalendriCode

Juillet 2009
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Téléchargements

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

Comparez les prix Nouvelle version

Photothèque Nouveau !



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,328 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.