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 :

Comment gérer l'exception java.lang.ArrayIndexOutOfBoundsException


Sujet :

avec Java

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2014
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2014
    Messages : 1
    Points : 1
    Points
    1
    Par défaut Comment gérer l'exception java.lang.ArrayIndexOutOfBoundsException
    Bonjour;
    Voilà je suis entrain de construire un petit jeu en JAVA;
    Voici le code source de la classe Grille:
    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
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    package Jeu;
     
    public class Grille {
    	//attributs
    	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]='o';
    			}
    		}
    	}
     
    	//accesseurs 
    	public char getCase(int l, int c){
    		return grille [l-1][c-1];
    	}
     
     
    	//methodes
     
    	public void afficher (){
    		System.out.println();
    		for(int i=0;i<nblig;i++){
    			for(int j=0;j<nbcol;j++){
    				System.out.print("|" +grille[i][j]);
    			}
    			System.out.println("|");
    		}
    		System.out.println();
     
    	}
     
    	public void placerJ (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, vous n'êtes pas sur la grille");
    			return;
    		}
    		if(grille [l][c]=='o'){
    			grille [l][c]= t;
    		}
    		else {
    			System.out.println("Erreur de placement");
     
    		}
    	}
     
    	public void deplacerHaut (){
    		char tmp;
    		for(int i=0;i<nblig;i++){
    			for(int j=0;j<nbcol;j++){
    				if(grille [i][j]=='J'){
    					if(i-1>=0 && grille[i-1][j]=='o'){
    						tmp=grille[i][j];
    						grille[i][j]='o';
    						grille[i-1][j]=tmp;
    					}
    				}
     
    			}
     
    		}
    	}
     
    	public void deplacerBas (){
    		char tmp;
    		for(int i=0;i<nblig;i++){
    			for(int j=0;j<nbcol;j++){
     
    					if(i+1<nblig && grille[i+1][j]=='o'){
    						if(grille [i][j]=='J'){
    						tmp=grille[i][j];
    						grille[i][j]='o';
    						grille[i+1][j]=tmp;
    					}
    				}	
    			}
     
    		}
    	}
     
    	public void deplacerDroite (){
    		char tmp;
    		for(int i=0;i<nblig;i++){
    			for(int j=0;j<nbcol;j++){
    				if(grille [i][j]=='J'){
    					if(j+1<=nbcol && grille[i][j+1]=='o'){
    						tmp=grille[i][j];
    						grille[i][j+1]=tmp;
    						grille[i][j]='o';
     
    					}
    				}	
    			}
     
    		}
    	}
     
    	public void deplacerGauche (){
    		char tmp;
    		for(int i=0;i<nblig;i++){
    			for(int j=0;j<nbcol;j++){
    				if(grille [i][j]=='J'){
    					if(j-1>=0 && grille[i][j-1]=='o'){
    						tmp=grille[i][j];
    						grille[i][j]='o';
    						grille[i][j-1]=tmp;
    					}
    				}	
    			}
     
    		}
    	}
    }
    Voici celui de la classe main:

    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
    package Jeu;
    import java.util.*;
     
    public class main {
     
    	public static void main (String [] args) {
    		Grille g1= new Grille (5,5);
    		System.out.println("J = Joueur\nO = Objet\nM = Monstre\n- = Vide\n");
    		g1.placerJ(3, 2, 'J');
     
     
    		g1.afficher();
     
    		System.out.println(g1.getCase(3,2));
     
    		g1.deplacerHaut();
    		g1.afficher();
     
    		g1.deplacerGauche();
    		g1.afficher();
     
    		g1.deplacerBas();
    		g1.afficher();
     
    		g1.deplacerDroite();
    		g1.afficher();
     
     
     
    	}
     
    }
    Les deux méthodes deplacerBas et deplacerDroite ne marchent pas j'ai toujours ce résultat:

    Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 5
    at Jeu.Grille.deplacerDroite(Grille.java:97)
    at Jeu.main.main(main.java:25)


    Merci d'avance pour vos suggestions

  2. #2
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 551
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 551
    Points : 21 607
    Points
    21 607
    Par défaut
    ... En évitant de sortir de la grille peut-être ?
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Modérateur
    Avatar de Alkhan
    Homme Profil pro
    ingénieur full stack
    Inscrit en
    Octobre 2006
    Messages
    1 232
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : ingénieur full stack

    Informations forums :
    Inscription : Octobre 2006
    Messages : 1 232
    Points : 2 061
    Points
    2 061
    Par défaut
    bonjour,

    Le problème est simple, thelvin a raison dans ces deux méthodes tu sors de la grille lors du traitement du dernier élément.
    Avec "grille[i+1][j]" tu sors de la grille lorsque tu traites la dernière ligne !
    Avec "grille[i][j+1]" tu sors de la grille lorsque tu traites la dernière colonne !

    Tu ne peux donc pas faire "i+1" ou "j+1" sans vérifier que tu ne va pas dépasser la taille du tableau.
    Il n'y a pas de problème, il n'y a que des solutions.
    Cependant, comme le disaient les shadoks, s'il n'y a pas de solution, c'est qu'il n'y a pas de problème.
    Si toutefois le problème persiste, la seule solution restante est de changer le périphérique qui se trouve entre la chaise et l'écran

    Mes Articles : Mon premier article est sur le language D
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

Discussions similaires

  1. Réponses: 1
    Dernier message: 29/12/2014, 12h02
  2. Réponses: 1
    Dernier message: 21/03/2012, 15h08
  3. Réponses: 8
    Dernier message: 21/11/2011, 13h58
  4. Réponses: 0
    Dernier message: 23/12/2009, 10h56
  5. [C#/SQL] Comment gérer les exceptions d'une Procédure stockée ?
    Par thomas_strass dans le forum Accès aux données
    Réponses: 10
    Dernier message: 06/07/2005, 10h40

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