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

Java Discussion :

Erreur pointeur dans mon tableau


Sujet :

Java

  1. #1
    Nouveau Candidat au Club
    Erreur pointeur dans mon tableau
    Bonjour,

    J'ai commencé il y a quelques mois à m'intéresser au développement (en Java, donc) dans l'espoir de créer des automates cellulaires.
    J'ai essayé de mettre en pratique ce que j'ai appris sur les tableaux mais je ne comprends pas pourquoi le compilateur m'indique une erreur de pointeur, qu'il m'indique comme étant Null.

    Je poste ci-dessous le morceau de code, assez maladroit j'imagine, que j'ai tenté de reformuler avec des objets ; car j'avais au départ créé un tableau avec des valeurs symbolisant l'état de mort, de vie au prochain tour ou de vie active.
    Le morceau ne correspond pour l'instant qu'à un test assez sommaire pour afficher différemment les cases extérieures, que je croyais à l'origine de mon problème de pointeur.

    Si je vais dans la mauvaise direction avec des boucles et ces objets, n'hésitez pas à me le signaler !

    Merci à vous

    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
    public class App {
     
    	public static Tile tab [] [] = new Tile [20] [20];
     
    	public static void main(String [] args)
    	{
    		check();
    		display();
    	}
     
    	public static void check()
    	{
    		int i, j;
     
    		for(i=1; i<(tab.length-1); i++)
    		{
    			for(j=1; i<(tab[0].length-1); j++)
    			{
    				tab[i][j].wLive=true;
    			}
    		}
    	}
     
    	public static void display()
    	{
    		int i, j;
     
    		for(i=0; i<tab.length; i++)
    		{
    			for(j=0; j<tab[0].length; j++)
    			{
    				if(tab[i][j].wLive==true)
    					System.out.print("X");
    				else
    					System.out.print("?");
    			}
    			System.out.println();
    		}
    	}
    }


    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    public class Tile {
     
    protected boolean live;
    protected boolean wLive;
     
    public Tile()
    {
    	live = false;
    	wLive = false;
    }
     
    }

  2. #2
    Membre habitué
    Salut,

    En regardant rapidement ton code, on peut voir que dans ta methode check() qui rempli ton tableau 2D, la condition dans ta boucle est i < tab.length -1 alors que dans ta seconde methode la condition est i < tab.length qui te menera donc a une case sans valeur lorsque i == tab.length - 1

  3. #3
    Nouveau Candidat au Club
    Citation Envoyé par Yonito Voir le message
    Salut,

    En regardant rapidement ton code, on peut voir que dans ta methode check() qui rempli ton tableau 2D, la condition dans ta boucle est i < tab.length -1 alors que dans ta seconde methode la condition est i < tab.length qui te menera donc a une case sans valeur lorsque i == tab.length - 1
    J'ai créé des constructeurs qui initialisent mes Tile à false, false pour les boolean, alors je ne pense pas que ce soit ça.
    Mon code d'erreur confirme que l'erreur vient de plus haut encore :
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    Exception in thread "main" java.lang.NullPointerException
    	at premier.App.check(App.java:22)
    	at premier.App.main(App.java:9)


    Des idées ?

  4. #4
    Membre habitué
    ce code n'est pas bon :
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    tab[i][j].wLive=true;


    Dans ta methode check(), ta valeur tab[i][j] est null (ton tableau n'a pas recu de valeur encore), tu ne peux donc pas faire un appel a wLive