Partage
  • Partager sur Facebook
  • Partager sur Twitter

Le jeu de la vie

Ou comment en chier avec les entrées/sorties ...

Sujet résolu
    10 octobre 2010 à 0:21:35

    Bonjour (bonsoir plutôt) à tous !

    Je suppose que vous avez déjà dû entendre parler du jeu de la vie au moins une fois dans votre vie, sinon voir l'article wikipédia consacré : http://fr.wikipedia.org/wiki/Jeu_de_la_vie

    Je dois réaliser un programme Java permettant de lire un fichier contenant les données initiales, puis de faire autant de cycles que l'utilisateur le désire, et enfin écrire le résultat final dans le fichier de départ.

    Je n'ai aucun problème pour les deux dernières étapes (je suis contraint d'utiliser une classe particulière pour l'écriture dans un fichier). Cependant, j'ai de grandes difficultés par rapport à l'intégration dans un tableau (à deux dimensions) du fichier de départ.
    Ce fichier est du type suivant (en terme de structure) (1 pour une cellule active, 0 pour une cellule inactive) :
    1011
    0110
    1001
    0101


    Mon problème est le suivant : j'arrive à récupérer les données du fichier dans un tableau, mais uniquement à l'intérieur d'une boucle while, et lorsque je tente d'afficher le tableau en dehors de cette boucle, il ne contient pas du tout le contenu de fichier ...
    Je ne vous mets pas tout le code en dessous, mais uniquement la partie concernant la lecture du fichier et l'intégration des données dans un tableau.

    Toute aide est la bienvenue !




    import java.io.*;
    
    public class essai2 {
        public static void main(String[] args){
    
            int tailleTableau = 0;
            int tableau [][] = new int [1][1];
            
            try{
                String ligneLue;
                String str;
                //création du flux
                LineNumberReader lnr=new LineNumberReader(new FileReader("resultat.txt"));
                
                try{
                    //lecture et affichage des données
                    for(int i=0 ; i<1000 ; i++)
                    {
                        while((ligneLue=lnr.readLine())!=null){
                            str = ligneLue;
                            tailleTableau = str.length();
                        }
                    }
                }
                    finally{
                        //libération des ressources
                        lnr.close();
                    }
                }
                catch(IOException e){
                    System.out.println(e);
                }
                tableau = new int [tailleTableau][tailleTableau];
            
            try{
                String ligneLue;
                String str;
                //creation du flux
                LineNumberReader lnr=new LineNumberReader(new FileReader("resultat.txt"));
                
                try{
                    //lecture et affichage des données
                    
                    for(int i=0 ; i<tailleTableau ; i++)
                    {
            
                    while((ligneLue=lnr.readLine())!=null){
                        str = ligneLue;
                    
                            for(int j=0 ; j<tailleTableau ; j++)
                            {
                                char carac = str.charAt(j);
                                int valeur = (int)carac;
                                if(valeur==49){valeur = 1;}
                                else if(valeur==48){valeur = 0;}
                                else{System.out.println("\nIl y a un problème avec le cast de valeurs"); break;}
                                tableau[i][j] = valeur;
                                System.out.print(tableau[i][j]);
                            }
                            System.out.print("\n");
                        }
                    }
                }
                finally{
                    //libération des ressources
                    lnr.close();
                }
            }
            catch(IOException e){
                System.out.println(e);
            }
        }
    }
    
    • Partager sur Facebook
    • Partager sur Twitter
      10 octobre 2010 à 13:40:33

      Salut!
      Y a une partie que je trouve bizarre, celle là :
      for(int i=0 ; i<1000 ; i++)
                   {
                        while((ligneLue=lnr.readLine())!=null){
                             str = ligneLue;
                             tailleTableau = str.length();
                        }
                   }
      

      Tu indiques bien que bout de code te sert à la "lecture et affichage des données", pourtant je ne vois n'y stockage de ces données dans ton tableau à deux dimensions, ni affichage de ces données avec un System.out.println(). Ou c'est normal ?

      Parce qu'à la fin tu fais ça :
      tableau = new int [tailleTableau][tailleTableau];
      

      Ce qui ne sert à rien vu que "tailleTableau" ne correspondra qu'à la taille de la dernière ligne lue dans la précédente boucle.
      D'ailleurs, pourquoi recommencer milles fois cette boucle ? Je comprends pas :o
      • Partager sur Facebook
      • Partager sur Twitter
        10 octobre 2010 à 15:37:09

        Bonjour Topoxy !
        Et merci de ta réponse.

        Je vais tâcher d'expliciter mon code, bout par bout.




        try{
                        //lecture et affichage des données
                        for(int i=0 ; i<1000 ; i++)
                        {
                            while((ligneLue=lnr.readLine())!=null){
                                str = ligneLue;
                                tailleTableau = str.length();
                            }
                        }
                    }
        


        Cette section sert à récupérer la taille (longueurs de la chaîne) de chaque ligne, qui dans mon programme correspond aussi au nombre de lignes (en effet, j'utilise uniquement des fichiers ayant autant de "lignes" (de mon futur tableau) que de "colonnes". Il est vrai que l'idée de parcourir 1000 fois ne sert à rien, je vais enlever ça : un seul parcourt devrait suffire.



        Mon problème réel se porte sur ce qui suit :


        while((ligneLue=lnr.readLine())!=null){
                            str = ligneLue;
                        
                                for(int j=0 ; j<tailleTableau ; j++)
                                {
                                    char carac = str.charAt(j);
                                    int valeur = (int)carac;
                                    if(valeur==49){valeur = 1;}
                                    else if(valeur==48){valeur = 0;}
                                    else{System.out.println("\nIl y a un problème avec le cast de valeurs"); break;}
                                    tableau[i][j] = valeur;
                                    System.out.print(tableau[i][j]);
                                }
                                System.out.print("\n");
                            }
                        }
        



        Cette section semble compliquée de prime abord, mais c'est pour contourner les nombreuses difficultés qui se dressaient face à moi.
        J'essaie de récupérer chaque "caractère" (en réalité un 0 ou un 1) de chaque ligne, puis je transforme chaque caractère en un entier (int valeur = (int)carac;) : par la conversion, un 0 vaut 48 et un 1 vaut 49, donc je transforme ces valeurs en 0 et 1 (if(valeur==49){valeur = 1;} else if(valeur==48){valeur = 0;}).
        Puis je rentre ces valeurs dans le tableau (tableau[i][j] = valeur;).

        Mon problème est que lorsque je regarde le contenu de mon tableau à l'intérieur de la boucle while, il n'y a aucun problème, mais dès que je le regarde en dehors, mon tableau ne contient plus qu'un 1 en début, et ensuite une série de 0.

        Je ne saisis pas pourquoi, mais ça doit être lié à la portée du tableau (pourtant je fais en sorte de le déclarer avant la boucle while !).

        Si quelqu'un comprend pourquoi ça m'arrive, et trouve une solution, n'hésitez pas !
        Merci d'avance.
        • Partager sur Facebook
        • Partager sur Twitter
          10 octobre 2010 à 16:09:33

          Tien inspire toi de ceci ca marche :
          ( j'ai eu la flemme de chercher ton erreur )

          import java.io.FileNotFoundException;
          import java.io.FileReader;
          import java.io.IOException;
          import java.io.LineNumberReader;
          import java.util.StringTokenizer;
          
          
          public class main {
          
          public static void main(String[] args) throws IOException{
          	
          	int tableau [][] ;
          			        
          	try {
          		LineNumberReader lnr=new LineNumberReader(new FileReader("resultat.txt"));
          		String str = new String(lnr.readLine());
          		int nb = str.length();
          		
          								
          		tableau = new int[nb][nb] ;
          		
          								
          		for ( int i = 0 ; i < nb ; i++ )
          		{	
          									
          			for (int j = 0 ; j < nb ; j++)
          			{
          											
          				int valeur = str.charAt(j);
          				if(valeur==49){valeur = 1;}
          				else if(valeur==48){valeur = 0;}
          				tableau[i][j] =  valeur;
          										
          			}
          										
          	                        str = lnr.readLine();
          		
          		}
          								
          								
          								
          		for ( int i = 0 ; i < nb ; i++ )
          		{							
          			for ( int j = 0 ; j < nb ; j++ )
          			{
          				System.out.println(tableau[i][j]);  //AFFICHAGE
          			}
          		}
          							
          										
          		} catch (FileNotFoundException e) {
          			e.printStackTrace();
          		}
          	}
          }
          


          Si ta d'autre questions n'hesite pas.
          J'ai un petit jeux de la vie que j'ai deja codé.
          • Partager sur Facebook
          • Partager sur Twitter
            10 octobre 2010 à 20:34:06

            Salut mint0 !
            Merci de ta réponse.
            J'ai pas encore testé, mais d'après ce que je lis, ça m'a l'air plus simple que ce que je tentais de faire.
            Je teste ça ce soir, et normalement, demain matin c'est résolu !


            Ça y est, j'ai testé, c'est tout bon !
            Merci beaucoup !
            • Partager sur Facebook
            • Partager sur Twitter

            Le jeu de la vie

            × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
            × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
            • Editeur
            • Markdown