Partage
  • Partager sur Facebook
  • Partager sur Twitter

Probleme dans un programme java

Sujet résolu
    28 septembre 2016 à 16:50:13

    Bonjour,

    Je suis entrain de programmer un programme java pour m'entrainer un peut mais je rencontre le problème suivant : "Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 12
        at Jeu.Grille.deplacerB(Grille.java:100)
        at Jeu.testGrille.main(testGrille.java:47)"

    en regardant sur internet j'ai vu que cela veut dire que j'essaye d'accéder dans une cellule superieur à celle du tableau.

    hors je ne vois pas du tout pourquoi il me dit ça :/

    code du fichier grille.java

    package Jeu;
    
    public class Grille {
    	
    	// Attribut
    	
    	private int nbLig;
    	private int nbCol;
    	private char[][] grille;
    	
    	
    	// Constructeur
    	
    	public Grille(int n, int p){
    		nbLig=n;
    		nbCol=p;
    		grille=new char[nbLig][nbCol];
    		
    		for(int i=0;i<nbLig;i++){
    			for(int j=0;j<nbCol;j++){
    				grille[i][j]='x';
    				
    			}
    	
    		}
    	}
    	
    	// Assesseur
    	
    	public char getCase(int l, int c){
    		
    		return grille[l-1][c-1];
    		
    	}
    	
    	// Mutateur
    	
    	// Méthode
    	
    	public void afficher(){
    		System.out.println();
    		for(int i=0;i<nbLig;i++){
    			for(int j=0;j<nbLig;j++){
    				System.out.print(" | "+grille[i][j]);
    				
    			}
    				System.out.println(" | ");
    		}
    				System.out.println();
    	}
    	
    	// Placer
    	
    	public void placer(int l, int c, char t){
    		
    		l=l-1;
    		c=c-1;
    		
    		if(l<0  | c<0 || l>nbLig || c>nbCol){
    			System.out.println("Erreur !");
    			return;
    		}
    		
    		if(grille[l][c] == 'x')
    		{
    			grille[l][c] = t;
    		}
    		
    		else{
    			System.out.println("Erreur cette zone n'est pas vide !");
    		}
    	}
    	
    	// Déplacer
    	
    public void deplacerH(){
    	char tmp;
    	for(int i=0;i<nbLig;i++){
    		for(int j=0;j<nbCol;j++){
    			if(grille[i][j]=='J'){ // On cherche le joueur
    				if(i-1 >=0){ // On test la position
    					tmp=grille[i][j]; // On copie le joueur
    					grille[i][j] = 'x'; // On On vide la case
    					grille[i-1][j]=tmp; // On déplace le joueur une case vers le haut	
    					
    				}
    			}
    		}
    	}
    }
    	
    	public void deplacerB(){
    		char tmp;
    		for(int i=0;i<nbLig;i++){
    			for(int j=0;j<nbCol;j++){
    				if(grille[i][j]=='J'){ // On cherche le joueur
    					if(i+1 <= nbLig){ // On test la position
    						tmp=grille[i][j]; // On copie le joueur
    						grille[i][j] = 'x'; // On On vide la case
    						grille[i+1][j]=tmp; // On déplace le joueur une case vers le haut	
    						
    					}
    				}
    			}
    		}
    		
    
    
    	}
    	
    	}
    	
    
    

    Cordialement,

    -
    Edité par briciou62 28 septembre 2016 à 16:50:53

    • Partager sur Facebook
    • Partager sur Twitter
      28 septembre 2016 à 19:10:19

      Bonjour,

      Il suffit de lire le message d'erreur... Il t'indique qu'à la ligne 100 le programme plante, si tu regarde c'est là où tu déplaces ton personnage vers le bas, en allant à la case n+1, sauf que si tu es au bord de ta map définis par tes lignes et colonnes, et bien en faisant appel à nouveau à cette méthode (probablement avec des touches) et bien tu sortiras de ta map, donc de ton tableau, donc tu essayes bien d'accéder à une cellule de ton tableau qui n'existe pas.

      • Partager sur Facebook
      • Partager sur Twitter
        28 septembre 2016 à 20:31:36

        Bonsoir,

        A vrais dire, mon joueur la lettre J peut dessendre d'une case sans sortir de la grille ;) c'est que je ne comprend pas :/

        voici ma grille :

        • Partager sur Facebook
        • Partager sur Twitter
          28 septembre 2016 à 22:08:45

          Hum peux tu nous montrer ton main ?

          Au passage corrige ta 2e condition :

          if(i+1 <= nbligne)

          mets simplement "<" , ton nombre de lignes commence à 1 et pas 0.

          • Partager sur Facebook
          • Partager sur Twitter
            28 septembre 2016 à 22:27:14

            D'accord, merci

            voici mon main :

            package Jeu;
            
            import java.util.*;
            
            public class main {
            		
            		
            	public static void main(String[] args) {
            		// Description
            		
            		System.out.println("J = Joueur \n M = Monstre \n O = Objet");
            		
            		// On creer la grille
            		Grille g1 = new Grille(12,15);
            		
            		
            		// On place le joueur
            		
            		g1.placer(3, 5, 'J');
            		g1.placer(8, 2, 'O');			g1.placer(7, 4, 'O');			g1.placer(2, 8, 'O');
            		g1.placer(1, 1, 'M');			g1.placer(10, 7, 'M');			g1.placer(10, 2, 'M');
            		
            		
            		// On affiche la grille
            		g1.afficher();
            		g1.deplacerB();
            }
            }



            • Partager sur Facebook
            • Partager sur Twitter
              28 septembre 2016 à 22:43:40

              Je viens de comprendre le soucis :)

              Je pense que tu as oublié un return à la suite du mouvement du joueur. En fait, tu trouves J, tu vérifies la ligne suivante, et tu descends J, sauf que tu ne sors pas de ta boucle, ensuite tu finis ta ligne, puis tu vas à la ligne d'en dessous, donc là tu trouves à nouveau un J, donc tu le descends ...etc jusqu'au moment où tu arrives au bord de ton tableau.

              Ta fonction vers le haut ne bug pas car tu parcours ton tableau de haut en bas, mais si tu le parcours à l'envers tu auras le même problème.

              Et comme ta condition n'était pas exacte, ben ça plantais :) Mets la correctement et tu verras que ton J se retrouve tout en bas et que ça ne plante plus.

              -
              Edité par nicolasgaillard 28 septembre 2016 à 22:46:05

              • Partager sur Facebook
              • Partager sur Twitter
                28 septembre 2016 à 23:07:56

                Bonsoir,

                Merci, ça fonctionne à merveille ;)


                Cordialement,

                -
                Edité par briciou62 29 septembre 2016 à 19:39:04

                • Partager sur Facebook
                • Partager sur Twitter

                Probleme dans un programme java

                × 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