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

Langage Java Discussion :

Problème avec variable int qui vaut soit 0 soit 1


Sujet :

Langage Java

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2013
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2013
    Messages : 24
    Points : 15
    Points
    15
    Par défaut Problème avec variable int qui vaut soit 0 soit 1
    Bonjour,

    J'ai un soucis avec une variable dans mon code. Cette variable, counter, est un compteur mais le problème est que ce variable vaut soit 1 soit 0, alors qu'elle devrait parfois valoir 3, 4 etc. La variable sert en fait à compter le nombre de case contenant des 1 autour de la case courante, dans un tableau rectangulaire constituée de cases. Pourriez-vous jeter un coup d'oeil à mon code pour détecter l'erreur? D'avance merci.

    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
    	        int height = Integer.parseInt(taille[0]); //je reprends les dimesions du tableau
    		int width = Integer.parseInt(taille[1]);
    		int counter;
    		int [][] tempWorld = new int [height] [width];//il s'agit d'un tableau temporaire 
    		int nombreIteration=1;   //nombre d'itération à effectuer
     
     
     
    		for(int c=0; c <= nombreIteration; c++)
    		{
     
    			for(int j=0; j<width; j++) //cette double boucle compte le nombre de case qui valent 1 autour de la case [j][k] dans le tableau
    			{
    				for(int k=0; k<height; k++)
    				{
    					counter = 0;
     
    					if(j-1 >= 0 && k-1 >= 0 && world[j-1][k-1] == 1) // j'ai mis ces conditions sur le j et k pour ne pas sortir du tableau
    						counter++;
    					else if(j-1 >= 0 && world[j-1][k] == 1)
    						counter++;
    					else if(j-1 >= 0 && k+1 < height && world[j-1][k+1] == 1)
    						counter++;
    					else if(k+1 < height && world[j][k+1] == 1)
    						counter++;
    					else if(j+1 < width && k+1 < height && world[j+1][k+1] == 1)
    						counter++;
    					else if(j+1 < width && world[j+1][k] == 1)
    						counter++;
    					else if(j+1 < width && k-1 >= 0 && world[j+1][k-1] == 1)
    						counter++;
    					else if(k-1 >= 0 && world[j][k-1] == 1)
    						counter++;
     
     
    					//cette partie sert à determiner le nouveau tableau pour la prochaine itération
     
    					if((counter == 2 || counter == 3) & world[j][k] == 1)
    						tempWorld[j][k]=1;
    					else if(counter <= 1 | counter >= 4)
    						tempWorld[j][k] = 0; 
    					else if(counter == 3 & world[j][k] == 0)
    						tempWorld[j][k]=1;
     
    				}
    			}			
     
    			for(int a=0; a<height; a++) //on recopie le tableau temp. dans le bon tableau
    				for(int b=0; b<width; b++)
    					world[a][b] = tempWorld[a][b];
     
    		}

  2. #2
    Membre habitué
    Profil pro
    Opération
    Inscrit en
    Décembre 2012
    Messages
    91
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Opération

    Informations forums :
    Inscription : Décembre 2012
    Messages : 91
    Points : 188
    Points
    188
    Par défaut
    Votre 'counter' est remis à zéro à chaque itération interne et ne peut être incrémenté au maximum de 1 dans une itération ! Donc effectivement toujours 0 ou 1...
    Je n'ai pas trop compris la fonctionnalité souhaitée mais il me semble avoir beaucoup de test complexe pour être honnête !

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2013
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2013
    Messages : 24
    Points : 15
    Points
    15
    Par défaut
    J'ai juste mis la partie du programme où j'ai un problème le but est en fait de determiner le nombre de 1 présent dans les cases autour de chaque case d'une matrice. Et en fonction de ces nombres, je dois mettre a jour le tableau. Il s'agit d'une sorte de mini jeu. Mais je je vois toujours pas la source de l'erreur car il est normal que counter soit remis à 0 a chaque itération puisque je dois compter le nombre de 1 autour de la case pour chaque case(la boucle exterieure pour changer la ligne de la matrice et la boucle intérieure pour avancer de colonne en colonne). De plus, counter passe par 8 if car il y a 8 cases autour de chaque case sauf celles des extremites. Et donc la valeur devrait pouvoir changer.

  4. #4
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Janvier 2010
    Messages
    312
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 312
    Points : 533
    Points
    533
    Par défaut
    Bonjour,

    Le problème vient de tes 'else if'.

    Il ne fait que 0 ou 1 test par tour alors que tu veux tester les 8 positions adjacentes. Il faut donc enlever les else

    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
     
                                            if(j-1 >= 0 && k-1 >= 0 && world[j-1][k-1] == 1) // j'ai mis ces conditions sur le j et k pour ne pas sortir du tableau
    						counter++;
    					if(j-1 >= 0 && world[j-1][k] == 1)
    						counter++;
    					if(j-1 >= 0 && k+1 < height && world[j-1][k+1] == 1)
    						counter++;
    					if(k+1 < height && world[j][k+1] == 1)
    						counter++;
    					if(j+1 < width && k+1 < height && world[j+1][k+1] == 1)
    						counter++;
    					if(j+1 < width && world[j+1][k] == 1)
    						counter++;
    					if(j+1 < width && k-1 >= 0 && world[j+1][k-1] == 1)
    						counter++;
    					if(k-1 >= 0 && world[j][k-1] == 1)
    						counter++;

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2013
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2013
    Messages : 24
    Points : 15
    Points
    15
    Par défaut
    Merci beaucoup je ne sais plus comment te remercier, ça faisait quelques heures que je cherchais et l'algorithme me paraissait normal. Il s'agit de la suite de mon code de hier en fait . Comme quoi il faut toujours faire attention aux moindres détails !!!

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Problème avec un lien qui contient deux variables
    Par pierrot10 dans le forum Valider
    Réponses: 1
    Dernier message: 16/04/2009, 14h00
  2. Problème avec un div qui n'est pas pris en compte
    Par boss_gama dans le forum Général JavaScript
    Réponses: 11
    Dernier message: 25/07/2006, 16h32
  3. [Système] Problème avec variables
    Par marie4449 dans le forum Langage
    Réponses: 3
    Dernier message: 22/05/2006, 19h42
  4. PB avec une CComboBox qui vaut 0x00000000 !!
    Par chaser_T dans le forum MFC
    Réponses: 1
    Dernier message: 29/12/2005, 18h29
  5. Réponses: 3
    Dernier message: 16/09/2005, 10h01

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