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

avec Java Discussion :

Matrice boolean, matrice int


Sujet :

avec Java

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    36
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 36
    Points : 28
    Points
    28
    Par défaut Matrice boolean, matrice int
    Bonsoir,
    je cherche à recuperer les valeurs d'un tableau boolean pour les afficher dans un tableau int.J'ai commencé par la premiere ligne, premiere case [0][0],si à coté il y a 3 true, je dois afficher 3 dans l'autre tableau.
    J'ai l'impression que mon raisonnement est bon mais il m'affiche n'importe quoi!
    Si quelqu'un à une idée..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
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    class Test5{
     	public static boolean [][]InitialiseTabBombes(){
     		boolean [][]tabBombes=new boolean[8][8];
     		for(int i=0;i<tabBombes.length;i++)
     			for(int j=0;j<tabBombes[i].length;j++)
     				tabBombes[i][j] = false; 			
     		int CompteurBombes=0;
     		while(CompteurBombes<10){
     			int x=(int)(Math.random()*8); //coordonnée aléatoire de la bombe
     			int y=(int)(Math.random()*8);
     			if(tabBombes[x][y]==false){  // si pas de bombe, j'en place  une;
     				tabBombes[x][y]=true;
     				CompteurBombes++;
     			}
     		}
     		return tabBombes;
     	} 	
    	public static void afficherTabBombes(boolean[][]tab){
    		char[]alpha={' ','A','B','C','D','E','F','G','H'};
    		for(int i=0;i<alpha.length;i++)
    			Terminal.ecrireString(alpha[i]+" ");
    		Terminal.sautDeLigne();
    		for(int i=0;i<tab.length;i++){
    			Terminal.ecrireString(i+1 + " ");
    			for(int j=0;j<tab[i].length;j++)
    				if(tab[i][j])
    					Terminal.ecrireString("x ");
    				else
    					Terminal.ecrireString(". ");
    		Terminal.sautDeLigne();
    		}
    	}
    	//init tableau saisicase;
    	public static int [][]InitialiseSaisiCase(){
    		int[][] SaisiCase=new int[8][8];// enregistre les bombes
    		for(int i=0;i<SaisiCase.length;i++){//initialisation à -1
    			for(int j=0;j<SaisiCase[i].length;j++) 
    				SaisiCase[i][j]=-1;
    			}
    		return SaisiCase;
    		}
    		public static void affichereSaisiCase(int[][]tabCase){
    			for(int i=0;i<tabCase.length;i++){
    				Terminal.ecrireString(i+1+ " ");
    				for(int j=0;j<tabCase[i].length;j++)
    					Terminal.ecrireString(tabCase[i][j] + "");
    			Terminal.sautDeLigne();
    			}//for
    		}		
    	public static void main(String[]args){
    		boolean[][]tabBombes=InitialiseTabBombes();
    		afficherTabBombes(tabBombes);
    		Terminal.sautDeLigne();
    		int[][]SaisiCase=InitialiseSaisiCase();
    		//calcul des cases adjacentes
    		int bombe=0;
    		int ligne=0;
    		int col=0;
    		int i=0;
    		int j=0;
    		for(int k=0;k<SaisiCase.length;k++){
    			for(int l=0;l <SaisiCase[k].length;l++)
    				if(tabBombes[k][l]==false){//si la case n'est pas une bombe
    					ligne=0;
    					col=0;
    					if(ligne==0){ //1ere ligne
    						if(col==0){ //coin sup gauche
    							for(i=ligne;i<=ligne+1;i++)
    								for(j=col;j<=col+1;j++)
    									if(tabBombes[ligne][col]==true)
    										bombe++;
    						SaisiCase[ligne][col]=bombe;
    						}								
    						else if (col==SaisiCase.length-1){ // coin sup droit
    							for(i=ligne;i<=ligne+1;i++)
    								for(j=col-1;j<=col;j++)
    									if(tabBombes[ligne][col]==true)
    										bombe++;
    							SaisiCase[ligne][col]=bombe;
    						}//else if
    						else{ // bord haut
    							for(i=ligne;i<=ligne+1;i++)
    								for(j=col-1;j<=col+1;j++)
    									if(tabBombes[ligne][col]==true)
    										bombe++;
    							SaisiCase[ligne][col]=bombe;
    						}// else
     
    					}// if
     
    				}//if false	
    		}//for
    		affichereSaisiCase(SaisiCase);
    	}//main
     }

  2. #2
    Nouveau membre du Club
    Profil pro
    Doctorant en informatique théorique
    Inscrit en
    Décembre 2010
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Doctorant en informatique théorique

    Informations forums :
    Inscription : Décembre 2010
    Messages : 28
    Points : 32
    Points
    32
    Par défaut
    Salut,

    Effectivement, au niveau algorithmique ca me semble en général correct, mais il y a des soucis niveau implémentation.

    Tout d'abord, je trouve que tu utilises beaucoup de variables pour représenter les lignes et les colonnes dans ton main, ce qui fait qu'on s'y perd un peu. Les i et j, tu pourrais éviter de les déclarer au début et plutôt les laisser dans les for.
    De plus, tes variables ligne et col ne servent à rien, ce sont en réalité k et l (qui elles sont incrémentées à chaque itération).

    Tu oublies également de remettre le compteur bombe à 0 à chaque passage, ce qui fait que tu obtiens un nombre de plus en plus grand.

    A part ca, tu ne traites que la première ligne... Tout est imbriqué dans ton if(ligne == 0). Tu dois donc avoir un traitement spécial pour les 4 coins (pas seulement les 2 du haut) et les 4 cotés. Tu pourrais envisager simplement d'incrémenter bombe pour chaque case entourant la case courante, en testant la position pour ne pas sortir du tableau.

    Voici ma solution. C'est fait en vitesse, tu pourrais extraire le test de la présence de la bombe et l'incrémentation dans une méthode qui prend les 2 indices en paramètres. Ce serait plus joli. J'affiche les bombes par un 8 pour que ce soit bien aligné.

    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
    57
    58
    59
    60
    61
     
    public static void main(String[]args){
    		boolean[][]tabBombes=InitialiseTabBombes();
    		afficherTabBombes(tabBombes);
    		System.out.println();
    		int[][]SaisiCase=InitialiseSaisiCase();
    		//calcul des cases adjacentes
    		int bombe=0;
    		for(int ligne=0;ligne<SaisiCase.length;ligne++){
    			for(int col=0;col <SaisiCase[ligne].length;col++) {
    				if(tabBombes[ligne][col]==false){//si la case n'est pas une bombe
    					bombe=0;
    					if(ligne != 0){ //on n est pas a la premiere ligne
    						if(tabBombes[ligne-1][col]){
    							bombe++;
    						}
    						if(col != 0){ //on n est pas a la premiere colonne
    							if(tabBombes[ligne-1][col-1]){
    								bombe++;
    							}
    						}
    						if(col != SaisiCase[ligne].length-1){ //on n est pas a la derniere colonne
    							if(tabBombes[ligne-1][col+1]){
    								bombe++;
    							}
    						}
    					}// if
    					if(ligne != SaisiCase.length-1){ //on n est pas a la derniere ligne
    						if(tabBombes[ligne+1][col]){
    							bombe++;
    						}
    						if(col != 0){ //on n est pas a la premiere colonne
    							if(tabBombes[ligne+1][col-1]){
    								bombe++;
    							}
    						}
    						if(col != SaisiCase[ligne].length-1){ //on n est pas a la derniere colonne
    							if(tabBombes[ligne+1][col+1]){
    								bombe++;
    							}
    						}
    					}// if
    					if(col != 0) {//on n est pas a la premiere colonne
    						if(tabBombes[ligne][col-1]){
    							bombe++;
    						}
    					}// if
    					if(col != SaisiCase[ligne].length-1) {//on n est pas a la derniere colonne
    						if(tabBombes[ligne][col+1]){
    							bombe++;
    						}
    					}// if
    				}//if false	
    				else {
    					bombe = 8;
    				}
    				SaisiCase[ligne][col]=bombe;					
    			}
    		}//for
    		affichereSaisiCase(SaisiCase);
    	}//main
    Si je peux me permettre une dernière remarque, je te conseille de toujours mettre les accolades, meme lorsque java ne t'y oblige pas (pour un for, ou un if-else d'une ligne). C'est une des plus grandes sources d'erreurs

Discussions similaires

  1. Passer d'une matrice boolean à une matrice int
    Par artemis93 dans le forum Débuter avec Java
    Réponses: 2
    Dernier message: 23/03/2011, 14h42
  2. [Débutant] Matrice de matrices
    Par Botman dans le forum MATLAB
    Réponses: 2
    Dernier message: 22/11/2007, 18h54
  3. Matrice de matrices ?
    Par joe-farka dans le forum MATLAB
    Réponses: 1
    Dernier message: 27/06/2007, 00h00
  4. [TP 7] Matrice dans matrice
    Par kedink dans le forum Turbo Pascal
    Réponses: 7
    Dernier message: 05/05/2007, 21h44
  5. Wrapper un boolean en int ?
    Par zuzuu dans le forum Langage
    Réponses: 7
    Dernier message: 20/07/2006, 08h36

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