Partage
  • Partager sur Facebook
  • Partager sur Twitter

java.lang.ArrayIndexOutOfBoundsException: 20

Sujet résolu
    4 décembre 2018 à 21:40:53

    Bonsoir,

    j'ai besoiin d'aide s'il vous plait.

    Le code marche mais renvoie cette erreur indiquant la partie ou il y a tabbis[i][j]=tabcells[i][j].

    Je sais pas exactement quel est le problème.

    voilà le code et son main;

    merci d'avance

    public class Monde {
    	
    	private int longueur;
    	private int hauteur;
    	private int noGener=0;
    	boolean[][] tabcells;
    	double seuil;
    	//tabcells= new boolean[longueur][hauteur];
    	public Monde(int longueur,int hauteur,double seuil) {
    		this.hauteur=hauteur;
    		this.longueur=longueur;
    		this.seuil=seuil;
    		tabcells= new boolean[longueur][hauteur];
    		int i,j;
    		for(i=0;i<longueur;i++) {
    			
    			for(j=0;j<hauteur;j++) {
    		if(Math.random()<seuil )tabcells[i][j]=false;
    		else tabcells[i][j]=true;
    			}
    		}
    	}
    	
    	public String toString() {
    		
    		int i,j;
    		
    		
    		String s="Generation numero :"+noGener+"\n ";;
    		for(i=0;i<longueur;i++) {
    			for(j=0;j<hauteur;j++) {
    				if(tabcells[i][j]==false) s+=" x ";
    				else s+=" * ";
    				
    				}
    			s+=" \n";
    		}
    		
    			System.out.println(s+"\n");
    		return s;
    	}
    	
    	public int nbVoisins(int nuLign,int nucol){
    		
    		int i,j;
    		int cmp=0;
    		for(i=-1;i<=1;i++) {
    			for(j=-1;j<=1;j++) {
    				if((tabcells[(nuLign+i+longueur)%longueur][(nucol+i+hauteur)%hauteur]==true) && (i!=0 ||j !=0)) {
    					cmp++;
    				}
    			}
    		}
    		//System.out.println(cmp);
    		return cmp;
    			
    				
    	}
    	
    	
    	public void generSuiv() {
    		int i,j;
    		
    		boolean[][] tabbis=new boolean[longueur][hauteur];
    		
    		noGener++;
    		for(i=0;i<longueur;i++) {
    			for(j=0;j<hauteur;j++) {
    				 //tabbis=new boolean[hauteur][longueur];
    				tabbis[i][j]=tabcells[i][j];
    				int cmp=this.nbVoisins(i,j);
    
    				if(cmp>3 && tabcells[i][j]==true) { tabbis[i][j]=false;}
    				if(cmp<2 && tabcells[i][j]==true) {tabbis[i][j]=false;}
    				if(cmp==3 && tabcells[i][j]==false) { tabbis[i][j]=true;i++;}
    				tabbis[i][j]=tabcells[i][j];
    				
    			}
    		}
    
    	
    				
    				for(i=0;i<longueur;i++){
    				    for(j=0;j<hauteur;j++){
    					tabcells[i][j]=tabbis[i][j];
    				    }
    				}
    				
    				
    				toString();
    			}
    		
    		
    
    }
    			
    			
    			
    			
    

    Et le main en dessous.

    public class TestJeuVie {
    	public static void main(String[]args) {
    		
    		Monde M=new Monde(20,20,0.2);
    		
    		int i;
    for(i=0;i<10;i++){
    			
    			M.toString();
    			M.generSuiv();
    	try {Thread.sleep(20);} // temporisation en ms      
     catch(InterruptedException e){
    		   e.printStackTrace();
    	}
    		}
    		
    		
    
    }
    }
    




    merci.

    • Partager sur Facebook
    • Partager sur Twitter
      4 décembre 2018 à 22:09:00

      Voyons voir ....

      Array -> Tableau

      Index -> Index

      Out of bounds -> En dehors des limites

      L'index que tu testes est supérieur à la taille de ton tableau?

      • Partager sur Facebook
      • Partager sur Twitter
      Un petit étudiant chinois perdu ^^'
        4 décembre 2018 à 23:50:51

        Non pas du tout c'est ce que j'ai du mal à comprendre. Normalement il ne lui est pas superieur
        • Partager sur Facebook
        • Partager sur Twitter
          5 décembre 2018 à 7:16:33

          "Normalement", étrangement quand il y a un bug cela ne marche pas "normalement".

          Utilise ton mode debug et verifie les index

          • Partager sur Facebook
          • Partager sur Twitter
          Un petit étudiant chinois perdu ^^'
            5 décembre 2018 à 7:40:47

            Bonjour,

            L'erreur est aux lignes 75-76.

            A ton avis, que se passe-t-il quand tu fais i++ si i = longueur - 1 ?

            Aussi, en Java, les tableaux 2D sont stockés par ligne. Donc, c'est plutôt le premier indice qui représente la hauteur.

            • Partager sur Facebook
            • Partager sur Twitter
              5 décembre 2018 à 10:36:58

              Effectivement, le i++ de la ligne 75 est le soucis. Ca fait que tu peux dépasser la limite fixée par ta boucle.
              • Partager sur Facebook
              • Partager sur Twitter
                5 décembre 2018 à 11:18:24

                brubru777 a écrit:

                Bonjour,

                L'erreur est aux lignes 75-76.

                A ton avis, que se passe-t-il quand tu fais i++ si i = longueur - 1 ?

                Aussi, en Java, les tableaux 2D sont stockés par ligne. Donc, c'est plutôt le premier indice qui représente la hauteur.


                A ha! jle savais 😑 pour la hauteur.. mais comme je cherchais le bugg j'ai inversé un peu n'importe quoi pour régler le problème. Le i++ est un i++ oublié d'un While passé eh oui la fatigue.. 

                Merci à tous pour vos réponses problème réglé!

                Merci. 

                • Partager sur Facebook
                • Partager sur Twitter

                java.lang.ArrayIndexOutOfBoundsException: 20

                × 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