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 :

Dépassement limites d'un tableau


Sujet :

Collection et Stream Java

  1. #1
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Octobre 2014
    Messages
    57
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2014
    Messages : 57
    Par défaut Dépassement limites d'un tableau
    Bonjour,

    J'essaie d'écrire une fonction pour déplacer un élément d'une case de mon tableau vers une autre.

    En fait je voudrais que mon élément se déplace tant que la case précédente est vide, jusqu'à atteindre la limite gauche de mon tableau.
    Mais je n'y arrive pas, déjà mon élément ne se déplace que d'une case à chaque fois et en plus lorsqu'il arrive à la colonne 0 il continue d'avancer

    Est-ce que vous pouvez m'aider svp?

    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
    	// Déplacement vers la gauche
    	public void deplacementG()
    	{
    		char tmp;
     
    		for (int i = 0; i < nbLig; i++)
    		{
    			for (int j = 0; j < nbCol; j++)
    			{
    				if ((j-1) >= 0)
    				{
    					tmp = grille[i][j];
    					grille[i][j] = ' ';
    					grille[i][j-1] = tmp;
    				}
    			}
    		}
    	}

  2. #2
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Billets dans le blog
    2
    Par défaut
    Salut,

    La réponse est un peu dans la question :
    Citation Envoyé par Seeverine Voir le message
    En fait je voudrais que mon élément se déplace tant que la case précédente est vide, jusqu'à atteindre la limite gauche de mon tableau.
    Il te faut donc une boucle while(), avec pour condition, un test de la case précédente, pour savoir si elle est vide.

    En gros, en pseudocode :

    Code pseudocode : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    index = index de la colonne de l'élément à déplacer
    tant que la case correspond à index  - 1 est vide et qu'on est pas dans la première colonne à gauche
        index = index - 1
    fin tant que
    si la case de colonne index est vide, alors mettre l'élément dans cette case et vider la case d'origine

    Si tu veux faire le déplacement au fur et à mesure :
    Code pseudocode : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    index = index de la colonne de l'élément à déplacer
    tant que la case correspond à index  - 1 est vide et qu'on est pas dans la première colonne à gauche
        mettre l'élément dans cette case et vider la case index
        index = index - 1
    fin tant que
    Par contre, je ne comprends pas ce que tu veux dire par
    Citation Envoyé par Seeverine Voir le message
    en plus lorsqu'il arrive à la colonne 0 il continue d'avancer
    Que signifie "avancer" ici ?
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  3. #3
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Octobre 2014
    Messages
    57
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2014
    Messages : 57
    Par défaut
    Merci de t'intéresser à mon problème..

    Si j'ai bien compris ce que tu as dit, mon code devrait ressembler à ceci?

    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
    		// Déplacement vers la gauche
    	public void deplacementG()
    	{
    		char tmp;
     
    		for (int i = 0; i < nbLig; i++)
    		{
    			for (int j = 0; j < nbCol; j++)
    			{
    				int a = j-1;
    				while (grille[i][a]== ' ' && a > 0)
    				{
    					a = a-1;
    				}
    				if (grille[i][a]== ' ')
    				{
    					tmp = grille[i][j];
    					grille[i][j] = ' ';
    					grille[i][a] = tmp;
    				}
    			}
    		}
    	}
    Ce que je veux dire par "avancer" c'est que lorsque la colonne 0 est atteinte, l'élément continue de se déplacer et donc disparaît de l'affichage

  4. #4
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Billets dans le blog
    2
    Par défaut
    J'ai fait une erreur en ajoutant le -1 dans mon algo :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    index = index de la colonne de l'élément à déplacer 
    tant que la case correspond à index - 1 est vide et qu'on est pas dans la première colonne à gauche
        index = index - 1
    fin tant que
    si la case de colonne index est vide, alors mettre l'élément dans cette case et vider la case d'origine
    Donc le code serait plutôt ça :

    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
    for (int i = 0; i < nbLig; i++)
    		{
    			for (int j = 0; j < nbCol; j++)
    			{
    				if ( grille[i][j]!=' ') {  // autant ne déplacer que les cases non vide, ça ne sert à rien
    					int a = j; 
    					while (a > 0 && grille[i][a-1]== ' ') // il faut test d'abord l'index de colonne pour que l'autre condition ne plante pas
    					{ 
    						a--;
    					} 
    					if (a >= 0 && grille[i][a]== ' ')
    					{
    						grille[i][a] = grille[i][j]; // pas besoin du tmp (puisqu'une case vide contient toujours ' ')
    						grille[i][j] = ' ';
    					}
    				}
    			}
    		}
    Je ne vois rien pour afficher dans ton code. Quand bien même, normalement si on "sort" du tableau, on a une exception (ArrayIndexOfOutboundException). Donc j'ai un peu de mal à imaginer comment c'est possible.
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  5. #5
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Billets dans le blog
    2
    Par défaut
    Je viens de penser à une chose : on peut remplacer

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if (a >= 0 && grille[i][a]== ' ')
    par

    Cela n'a pas tout à fait la même sémantique (plutôt si on doit déplacer l'élément, mais c'est plus simple.
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  6. #6
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Octobre 2014
    Messages
    57
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2014
    Messages : 57
    Par défaut
    J'ai modifié ma fonction en utilisant le petit bout de code que tu as corrigé, mais au lancement j'obtiens une erreur java.lang.ArrayIndexOutOfBoundsException: -1

    elle fait référence à cette ligne:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    while (grille[i][a-1]== ' ' && a >= 0)

  7. #7
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Octobre 2014
    Messages
    57
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2014
    Messages : 57
    Par défaut
    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
    	// Déplacement vers la gauche
    	public void deplacementG()
    	{	
    		for (int i = 0; i < nbLig; i++)
    		{
    			for (int j = 0; j < nbCol; j++)
    			{
    				if (grille[i][j] != 0)
    				{
    					while ((j-1) >= 0)
    					{
    						if(grille[i][j-1]== ' ') 
    						{
    							grille[i][j-1] = grille[i][j];
    							grille[i][j] = ' ';
    						}
    					}
    				}
    			}
    		}
    	}
    J'ai écris ce code qui selon moi ne comporte pas d'erreur.. Le problème est que pour une raison que j'ignore il ne s'exécute pas

  8. #8
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par Seeverine Voir le message
    J'ai modifié ma fonction en utilisant le petit bout de code que tu as corrigé, mais au lancement j'obtiens une erreur java.lang.ArrayIndexOutOfBoundsException: -1

    elle fait référence à cette ligne:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    while (grille[i][a-1]== ' ' && a >= 0)
    C'est parce qu'il faut tester a avant de lire grille[i][a-1] : les expressions sont évaluées dans l'ordre de gauche à droite en Java.

    De plus le cas a=0 donne a-1=-1, donc en dehors du tableau de toute manière.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    while (a>0 && grille[i][a-1]== ' ')
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  9. #9
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Octobre 2014
    Messages
    57
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2014
    Messages : 57
    Par défaut
    Ah oui d'accord.. Je te remercie!

  10. #10
    Membre éprouvé

    Femme Profil pro
    Étudiant
    Inscrit en
    Novembre 2013
    Messages
    87
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2013
    Messages : 87
    Par défaut
    j'ai pas bien compris comment est ce que vous décrementez un indice qui dans la premiere itération est égale à 0? (voir les comments sur le code)
    - cela peut engendrer un dépassement du tableau (en fonction de sa taille!)
    - tu ne maitrise pas l'élément précèdent qui sera 0-1!'

    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
    // Déplacement vers la gauche
    	public void deplacementG()
    	{	
    		for (int i = 0; i < nbLig; i++)
    		{   /*cette boucle commence par la premiere colonne à gauche j=0 */
    			for (int j = 0; j < nbCol; j++)
    			{
    				if (grille[i][j] != 0)
    				{
    					while ((j-1) >= 0) /* premier test se fait sur l'element 0-1!*/
    					{
    						if(grille[i][j-1]== ' ') 
    						{
    							grille[i][j-1] = grille[i][j];/* la encore le traitement est sensé etre sur le grille[i][0-1]*/
    							grille[i][j] = ' ';
    						}
    					}
    				}
    			}
    		}
    	}
    Commencer le parcours des colonnes de j= nbCol -1 jusqu'à j= 1, me semble plus logique.

  11. #11
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par Seeverine Voir le message
    Ah oui d'accord.. Je te remercie!
    C'est d'ailleurs le même problème que précédemment dans le dernier code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    while ((j-1) >= 0) {
       if(grille[i][j-1]== ' ')
    Si (j-1)==0, j-1= -1, et grille[i][-1] donne une exception.

    Par contre, dans le contexte du code, while ((j-1) >= 0), j ne variant pas dans une itération de la boucle for-j, le while n'a aucun intérêt et peut être remplacé par un if.
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  12. #12
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par o.meryem Voir le message

    Commencer le parcours des colonnes de j= nbCol -1 jusqu'à j= 1, me semble plus logique.
    Dans le contexte, cela pourrait poser un problème. En effet, on déplace vers la gauche. Si le dernier bout de code de @Seeverine déplace chaque élément dans la case vide qui se trouve automatiquement vers la gauche (contrairement au mien qui fait tout "tomber" vers la gauche, à la manière d'un 2048), le fait de déplacer un élément à gauche d'un autre, donne une case vide à sa place, et permet à l'élément suivant de se déplacer vers cette case nouvellement vide. Si on fait la boucle dans le sens que tu préconises, ce ne serait pas le cas.

    Imagine cette ligne : _XX_ :
    • première itération _XX_
    • deuxième itération (déplacement 1) : X_X_
    • troisième itération (deplacement 2) : XX__
    • quatrième itération : XX__


    Avec le parcours dans l'autre sens : déplacement

    • première itération _XX_
    • deuxième itération _XX_ (pas de case libre à gauche)
    • troisième itération (deplacement 1) : X_X_
    • quatrième itération : X_X_
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  13. #13
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Octobre 2014
    Messages
    57
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2014
    Messages : 57
    Par défaut
    C'est un très bon exemple que tu prends la @joel.drigo puisque j'essaie justement de programmer un 2048!

    J'ai décidé de modifier mes autres fonctions de déplacement sur le modèle que tu m'as expliqué, mais ce n'est pas une réussite totale

    Pour la fonction de déplacement vers la droite, une erreur de dépassement des limites apparaît lors de l'exécution à cause de cette ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    while (a <= nbCol && grille[i][a+1] == ' ')

  14. #14
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par Seeverine Voir le message
    C'est un très bon exemple que tu prends la @joel.drigo puisque j'essaie justement de programmer un 2048!

    J'ai décidé de modifier mes autres fonctions de déplacement sur le modèle que tu m'as expliqué, mais ce n'est pas une réussite totale

    Pour la fonction de déplacement vers la droite, une erreur de dépassement des limites apparaît lors de l'exécution à cause de cette ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    while (a <= nbCol && grille[i][a+1] == ' ')
    Bah, là, c'est toujours le même problème, mais de l'autre côté : si a vaut nbCol, a+1 est en dehors du tableau. C'est également le cas si a vaut nbCol-1, (puisque a + 1 vaudrait nbCol, et que les cases accessibles d'un tableau de dimension nbCol vont de 0 à nbCol-1.
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  15. #15
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Octobre 2014
    Messages
    57
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2014
    Messages : 57
    Par défaut
    L'erreur est toujours la même lorsque je remplace <= par < :s

  16. #16
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Octobre 2014
    Messages
    57
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2014
    Messages : 57
    Par défaut
    Ah non! En écrivant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    while (a+1 < nbCol && grille[i]a+1] == ' ')
    le résultat est nickel!

  17. #17
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Octobre 2014
    Messages
    57
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2014
    Messages : 57
    Par défaut
    Je suis désolée, j'ai encore besoin de votre aide

    Je me suis rendue compte durant mes tests que certains élément ne bougent pas si la case d'à côté est remplie. Un exemple :

    Si la ligne de départ est : _22_
    Apres un déplacement vers la droite la nouvelle ligne sera : _2_2

    Je ne vois pas comment régler le problème, j'ai essayé de remplacer le "if" par un "while" sur la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if (a <= nbCol && grille[i][a] == ' ')
    mais le résultat est le même..

    Est-ce que vous pouvez m'aider svp?

  18. #18
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Billets dans le blog
    2
    Par défaut
    En fait c'est le problème inverse que je décrivais au sujet de la remarque de @o.meryem, qui devient valable pour un mouvement vers la droite. Pour un mouvement vers la gauche il faut parcourir les colonnes de 0 à nbCol-1, pour un mouvement vers la droite, de nbCol-1 à 0, pour que la case à droite de celle qu'on veut déplacer ait déjà été déplacé l'itération précédent.

    C'est également valable pour le déplacement vers le bas et vers le haut (vers le haut correspond à vers les i=0, donc même règle que déplacement vers la gauche, alors que vers le bas correspond à avers les i=nbLig-1, donc même règle que déplacement vers la droite : il faut parcourir les lignes dans l'autre sens.
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  19. #19
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Octobre 2014
    Messages
    57
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2014
    Messages : 57
    Par défaut
    Je ne comprends pas

  20. #20
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Billets dans le blog
    2
    Par défaut
    Je reprend mon explication de tout à l'heure (simplifions en disant qu'il y a que des X est des cases vides, symbolisées par un _, dans le tableau).

    Prenons une ligne : __X__X__. indices : 0, 1, 2, 3, 4, 5, 6, 7

    Lorsqu'(on fait le déplacement vers la gauche, on traite d'abord la case d'indice 0, puis celle d'indice 1, puis celle d'indice 2 : on trouve une case non vide. On la déplace : vers la gauche, tant qu'il y a des cases vides. On obtient :

    X____X__

    Ok ?

    Puis on continue, on traite donc celle d'indice 3, puis celle d'indice 4, puis 5 : elle n'est pas vide, on déplace, vers la gauche tant qu'on trouve des cases vides, et on obtient :

    XX______

    Maintenant si on fait le même parcourt pour aller à droite (à partir de __X__X__) :

    On fait indice=0, indice=1, indice=2 : on trouve une case non vide. On déplace vers la droite et on obtiens :

    ____XX__

    Et oui parce qu'il y un second X qui n'a pas encore été déplacé, puisqu'on a pas encore traité l'indice 5. Donc celui de l'indice 2 s'arrête contre (à l'indice 4 donc).

    Puis on continue la boucle : on passe à l'indice 3, puis à l'indice 4 : on trouve une case non vide (puisqu'on vient d'y déplacer un X) : on tente de le déplacer mais il bloque contre celui qui en 5.

    Donc on continue : on traite l'indice 5. Non vide. Donc déplacement vers la droite. On obtient :

    ____X__X

    Puis on traite l'indice 6, puis le 7 : on trouve un X qu'on tente de déplacer vers la droite, mais on est au bord droit, donc on ne peut pas.

    On arrive au bout de la boucle.

    on a ____X__X comme résultat au lieu de ______XX.

    Si on avait fait la boucle dans l'autre sens, on aurait d'abord déplacer le X de droite (à l'indice 7) : __X____X, donc quand on aurait déplacer le X de gauche, après donc, il aurait pu aller jusqu'à l'indice 6 et on aurait bien obtenu ______XX comme voulu.
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

Discussions similaires

  1. Problème limite d'indice tableau
    Par Thyyb dans le forum VB.NET
    Réponses: 12
    Dernier message: 11/12/2013, 15h47
  2. Fixer les limites d'un tableau
    Par simipi dans le forum Balisage (X)HTML et validation W3C
    Réponses: 6
    Dernier message: 08/12/2011, 12h52
  3. [MySQL] Mysql LIMIT dans un tableau html
    Par xunil2003 dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 10/03/2010, 08h11
  4. dépassement limite de tables
    Par Invité dans le forum Développement
    Réponses: 12
    Dernier message: 19/12/2008, 11h58
  5. Taille limite d'un tableau
    Par torNAdE dans le forum C++
    Réponses: 15
    Dernier message: 21/10/2006, 12h15

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