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

Collection et Stream Java Discussion :

Transformation d'un String en tableau 2D de int


Sujet :

Collection et Stream Java

  1. #1
    Membre habitué Avatar de demonixis
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    80
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juin 2008
    Messages : 80
    Points : 150
    Points
    150
    Par défaut Transformation d'un String en tableau 2D de int
    Bonjour à tous

    Je developpe actuellement un petit jeu en java et je travail actuellement sur mon chargeur de map (vous allez comprendre pourquoi je n'ai pas poster dans la rubrique jeux vidéo). J'ai pour cela un fichier texte que je lis et stock dans une variable de type string. Ensuite je récupère les 3 première lignes (qui m'indique le nom du niveau, la taille X et Y), puis j'ai mon niveau de forme carré. Jusqu'a la tout va bien, par contre il me reste ma variable string qui contient le reste de mon fichier (donc la map), que j'aimerais convertir en tableau 2D (tab[X][Y]).

    Voici mon fichier map :

    Map de Test
    10
    10
    0000000000
    0111111110
    0111111110
    0111111110
    0111111110
    0111111110
    0111111110
    0111111110
    0111111110
    0111111110
    0000000000
    et maintenant voila la méthode avec la quelle je récupère les infos (bien entendu elle est bien loin d'être terminée ) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    private void transformMapFileToMapGame() {
            StringTokenizer st = new StringTokenizer(contentMapFile, "\n");
            mapName = (String) st.nextToken().trim();
            mapWidth = Integer.parseInt( st.nextToken().trim());
            mapHeight = Integer.parseInt( st.nextToken().trim());
     
            String temp = "";
            while (st.hasMoreElements()) 
                temp += (String) st.nextToken();
     
     
        }
    Comme vous le constaterez, je recupère le nom, ainsi que les tailles du niveau, puis il me reste une variable temp, qui contient tout le reste du fichier.

    Je me casse la tête (pour parler poliement ) depuis tout l'aprés midi pour trouver comment je pourrais convertir cette chaine en tableau de int 2D.

    Seriez vous comment faire ?

    En vous remerciant d'avance

  2. #2
    Membre émérite
    Avatar de gifffftane
    Profil pro
    Inscrit en
    Février 2007
    Messages
    2 354
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire (Rhône Alpes)

    Informations forums :
    Inscription : Février 2007
    Messages : 2 354
    Points : 2 582
    Points
    2 582
    Par défaut
    Où est-ce que tu coinces ? Et puis pourquoi est-ce que tu enregistres le format de taille en décimal alors que celui des formes carrés ( ? ) est en binaire ?... (enfin, je suppose et j'espère qu'il est voulu en binaire !? ) Et pourquoi veux-tu enregistrer des formes carrés en tableau 2D et pas en... forme carré ?

    Enfin bon, dans l'hypothèse où je suppose que je comprends bien, quelques éléments :
    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
     
    int[][][] carrés; // deux dimensions (pourquoi ? ) + le supposé carré
    ...
    String txtcarrégauche;
    String txtcarrédroit;
    int carrégauche;
    int carrédroit;
     
    txtcarrégauche = temp.substring(0, 5); // j'ai compté 10 chiffres, mais sans mes lunettes.
    txtcarrédroit = temp.substring(5);
    carrégauche = Integer.parseInt(txtcarrégauche, 2);
    carrédroit = Integer.parseInt(txtcarrédroit, 2);
    carrés[x][y] = new int[2];
    carrés[x][y][0] = carrédroit;
    carrés[x][y][1] = carrégauche; // ouf !
    Code à priori complètement stupide c'est juste pour donner des idées non compilé non garanti non testé.

  3. #3
    Membre habitué Avatar de demonixis
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    80
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juin 2008
    Messages : 80
    Points : 150
    Points
    150
    Par défaut
    Merci pour la réponse.

    Nous nous sommes mal compris je pense. Pour simplifier :

    J'ai un fichier texte qui contient ça :

    00000
    01110
    01110
    01110
    00000

    on peut le représenter par un tableau 2D lignes/colonnes. J'ai une variable de type String qui contient le contenu de mon fichier texte donc qui contient ce que j'ai mis plus haut. Ce que j'aimerais c'est récupérer caractères par caractères les éléments de mon string pour les mettre dans un tableau de int.

    donc sur la représentation ca me donnerais pour la ligne 000000
    tab[0][n] = 0 avec n { 0, 4 }
    tab[1][0] = 0, tab[1][1] = 1 ... etc....

    Donc en ayant une variable string qui contient tout cela, il faut prendre en compte les sauts de ligne et les virer (avec trim()) et récupérer ligne par ligne puis caractères par caractères. Mais c'est justement ici que je bloc

  4. #4
    Membre émérite
    Avatar de gifffftane
    Profil pro
    Inscrit en
    Février 2007
    Messages
    2 354
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire (Rhône Alpes)

    Informations forums :
    Inscription : Février 2007
    Messages : 2 354
    Points : 2 582
    Points
    2 582
    Par défaut
    EXCUSE MOI J'ETAIS AUX FRAISES !

    (il faut dire que je ne suis pas familier avec les concepts jeux)

    (à mon grand regret, d'ailleurs)

    bon bref, quelque chose comme :
    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
     
    int compteligne = 0;
    while (st.hasMoreElements()) 
    {
     temp += (String) st.nextToken();
     for (int col = 0; col < 5; col++)
     {
      char car = temp.charAt(col);
      switch (car)
      {
       case '0':
        tab[compteligne][col] = 0;
        break;
       case '1':
        tab[compteligne][col] = 1;
        break;
       default:
        throw new IllegalStateException("mince, c'est : "+car);
      }
     }
     compteligne++;
    }
    Approximativement.

    ?.

  5. #5
    Membre habitué Avatar de demonixis
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    80
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juin 2008
    Messages : 80
    Points : 150
    Points
    150
    Par défaut
    Merci, J'ai trouver une autre solution en utilisant un objet de type BuffuredReader.

    Voici mon fichier texte : mapTest.map

    Map de Test pour le moteur Links Back
    10
    10
    0000000000
    0111111110
    0111111110
    0111111110
    0111111110
    0111111110
    0111111110
    0111111110
    0111111110
    0000000000
    Voici mon code qui permet de récupérer toutes les infos :
    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
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
     
    import java.io.BufferedReader;
    import java.io.FileNotFoundException;
    import java.io.FileReader;
    import java.io.IOException;
     
    public class Test {
     
        public static void main(String[] args) throws FileNotFoundException, IOException {
     
            BufferedReader br = new BufferedReader(new FileReader("mapTest.map"));
            String temp[] = new String[11];
            char tab[][] = new char[11][10];
            int i = 0;
            String ligne;
     
            String nomMap = br.readLine();
            int nombreLignes = Integer.parseInt(br.readLine());
            int nombreColonnes = Integer.parseInt(br.readLine());
     
     
            do
            {
                ligne = br.readLine();
                if (ligne != null) 
                {
                    temp[i] = ligne;
                    i++;
                }
            }
            while (ligne != null);
            br.close();
     
            for (int j = 0 ; j < nombreLignes ; j++)
            {
                for (int h = 0 ; h < nombreColonnes ; h++)
                {
                    tab[j][h] = temp[j].charAt(h);
                }
            }
     
            System.out.println("Nom de la map : " + nomMap);
            System.out.println("Taile de la map : " + nombreLignes + "x" + nombreColonnes);
            System.out.println("Detail de la map : \n");
     
            for (int j = 0 ; j < nombreLignes ; j++)
            {
                for (int h = 0 ; h < nombreColonnes ; h++)
                {
                    System.out.print(tab[j][h]);
                }
                System.out.println("");
            }
     
        }
    }
    et la sortie console :

    Nom de la map : Map de Test pour le moteur Links Back
    Taile de la map : 10x10
    Detail de la map :

    0000000000
    0111111110
    0111111110
    0111111110
    0111111110
    0111111110
    0111111110
    0111111110
    0111111110
    0000000000
    Encore merci pour les conseils

Discussions similaires

  1. Réponses: 4
    Dernier message: 27/04/2013, 22h15
  2. transformer une string en tableau
    Par alexis.gruet dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 05/04/2007, 23h12
  3. Convertir une string en tableau de caractères
    Par alainpeniche dans le forum C++
    Réponses: 4
    Dernier message: 06/01/2007, 20h00
  4. char *, string et tableau statique ou dynamique
    Par salseropom dans le forum C
    Réponses: 2
    Dernier message: 05/12/2005, 11h33
  5. problème our passer des string dans tableau d'int
    Par Battosaiii dans le forum C++
    Réponses: 9
    Dernier message: 15/07/2004, 17h42

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