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 :

[Java] Probleme NullPointer


Sujet :

avec Java

  1. #1
    Membre confirmé Avatar de Echyzen
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2012
    Messages
    123
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2012
    Messages : 123
    Par défaut [Java] Probleme NullPointer
    Salut à tous,

    Je débute en Java j'ai un soucis assez bizzare j'ai un tableau d'objet à deux dimensions en tant que données membre .

    Une fois crée par le constructeur donc toute les positions initialisé j'utilise une fonction et la dès que je doit utiliser une fonction d'un des objets du tableau j'ai l'erreur nullpointer pourtant tout a bien été initialisé.

    Voila la bête :
    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
    public Main(int nbRow, int nbColumn) {
    		NB_ROW = nbRow;
    		NB_COLUMN = nbColumn;
    		Person World[][] = new Person[nbRow][nbColumn];
     
    		for (int Row = 0; Row < NB_ROW; Row++) {
    			for (int Column = 0; Column < NB_COLUMN; Column++) {
    				Random rand = new Random();
    				int i = rand.nextInt(4) + 1;
    				switch (i) {
    				case 1:
    					World[Row][Column] = new Duck();
    					break;
    				case 2:
    					World[Row][Column] = new Chicken();
    					break;
    				case 3:
    					World[Row][Column] = new Pig();
    					break;
    				case 4:
    					World[Row][Column] = new Human();
    					break;
    				}
     
    				World[Row][Column].affichType();
    				System.out
    						.print(' ' + World[Row][Column].getStatePrint() + '\t');
     
    			}
    			System.out.print('\n');
    		}
     
    		System.out.print("\n");
    	}
     
    	public void contact() {
     
    		// Tentative de contact des personnes contaminé
    		for (int Row = 0; Row < NB_ROW; Row++) {
    			for (int Column = 0; Column < NB_COLUMN; Column++) {
    				/*
    				 * Teste si la personne est contaminé sinon aucun interêt de
    				 * rentrer en contact avec les autres
    				 */
    				if (World[Row][Column].getState() == Person.State.Contagious
    						.toString()) {
    					// Selection de l'ensemble de ses 8 voisins
    					for (int i = -1; i <= 1; i++) {
    						for (int j = -1; j <= 1; j++) {
    							// Vérification des cas particuliers (effets
    							// de bords)
    							if ((i == 0 && j == 0) // Si i = j = 0 alors
    													// c'est la case
    													// elle même
    									|| ((i + Row) < 0)
    									|| ((j + Column) < 0)
    									|| ((i + Row) == NB_ROW) // si dépasse les limites de ligne du tableau
    									|| ((j + Column) == NB_COLUMN)) // si dépasse les limites de colonne
    								continue;
    							else
     
    								World[Row][Column]
    										.contact(World[Row + i][Column + j]);
     
    						}
    					}
    				}
    			}
    		}
     
    	} // contact()
    et le 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
    33
    34
    35
    36
    37
    38
    	public static void main(String[] args) {
     
    		// Affichage de la légende
    		System.out.print("Légende de l'état de santé de chacun :\n");
    		System.out
    				.print("Healthy --> O\tSick --> *\tContagious --> **\tRecovering -->OO\tDead --> ***\n\n");
     
    		// Creation de la Map
    		int read = 0;
    		System.out.print("Veuillez saisir le nombre de ligne a générer : ");
    		Scanner sc = new Scanner(System.in);
    		try {
    			read = (int) sc.nextInt();
    		} catch (InputMismatchException e) {
    			System.out
    					.println("\nInstanciation avec un nombre non valide\nLa valeur par défaut est donc affecté --> 10\n\n");
    			read = 10;
    			sc.nextLine(); // vide le buffer Scanner pour la prochaine
    							// utilisation
    		}
    		final int NB_ROW = read;
     
    		System.out.print("Veuillez saisir le nombre de colonne a générer : ");
    		try {
    			read = (int) sc.nextInt();
    		} catch (InputMismatchException e) {
    			System.out
    					.println("\nInstanciation avec un nombre non valide\nLa valeur par défaut est donc affecté --> 10\n\n");
    			sc.nextLine(); // vide le buffer Scanner pour la prochaine
    							// utilisation
    			read = 10;
    		}
    		final int NB_COLUMN = read;
     
    		Main world = new Main(NB_ROW, NB_COLUMN);
    world.contact();
     
    } // main()
    Si quelqu'un peut m'aider a comprendre pourquoi j'ai cette erreur ce serais vraiment d'une grande aide je suis totalement bloqué

  2. #2
    Expert éminent
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Billets dans le blog
    1
    Par défaut
    Salut,


    Sans balise [code] c'est vraiment illisible :/

    Sinon à quelle ligne survient l'erreur ? Tu auras ainsi une info sur l'origine du problème...


    a++

  3. #3
    Membre chevronné Avatar de Ceddoc
    Homme Profil pro
    Développeur Java
    Inscrit en
    Janvier 2009
    Messages
    493
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Janvier 2009
    Messages : 493
    Par défaut
    La ligne 45 (ici) me fait peur, si rien ne garantie que : ne sera jamais null il faut que tu t'en assures.

    Après oui il nous faut la trace pour pouvoir t'aider...

  4. #4
    Membre confirmé Avatar de Echyzen
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2012
    Messages
    123
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2012
    Messages : 123
    Par défaut
    Oui, effectivement désolé du désordre alors en faite l'erreur survient dès que j'effectue la fonction contact() et que j'utilise une fonction appartenant a Person donc la première fois que je demande est bien à la ligne 45 mais a ce moment là world[row][column] est obligatoirement instancié car dans le constructeur cela a été le cas (d'ailleurs dans le constructeur j'utilise déjà une méthode de Person getStateprint().

    Alors je comprends pas pourquoi rien ne garanti que cette ligne n'est pas instancié alors que dans le constructeur cette ligne a obligatoirement été instancié nn?

  5. #5
    Modérateur

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

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 577
    Par défaut
    Du coup j'imagine que ta classe contient une variable membre Person World[][];

    Et cette variable n'est absolument pas concernée par la ligne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Person World[][] = new Person[nbRow][nbColumn];
    puisque cette ligne crée une toute nouvelle variable locale qui n'a rien à voir avec aucune variable membre*, et qui va disparaître à la fin du constructeur, comme toutes les variables déclarées comme ça.

    * (même une variable membre qui, par le plus grand des hasards, porterait le même nom)

    Je suggère de remplacer cette ligne par :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    this.World = new Person[nbRow][nbColumn];
    (Et quand tu auras le temps, tu renommeras tout ça pour que ce soit world, en minuscules, et pas World, avec majuscule au début. Les variables et méthodes ne devraient pas commencer par une majuscule.)
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  6. #6
    Membre confirmé Avatar de Echyzen
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2012
    Messages
    123
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2012
    Messages : 123
    Par défaut
    Tout est dit merci énormément car j'aurais pu chercher pendant 2 heures sans grand résultat XD

    Je suis vraiment con

    Franchement, félicitation arriver a résoudre le chmilblik aussi rapidement chapeau

  7. #7
    Modérateur

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

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 577
    Par défaut
    Citation Envoyé par Echyzen Voir le message
    Je suis vraiment con
    Non. Ça nous est arrivé à tous. Ça nous arrive même encore de temps en temps, même si depuis on a appris à le voir tout de suite.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [JAVA] Probleme de connexion a ACCESS via une Servlet.
    Par rider4ever dans le forum Access
    Réponses: 8
    Dernier message: 10/02/2006, 18h45
  2. [FLASH 8][openAMF][remote][java]probleme d'import
    Par Invité dans le forum Flash
    Réponses: 5
    Dernier message: 02/12/2005, 17h51
  3. [java]probleme de case dans switch
    Par mousstik dans le forum Langage
    Réponses: 8
    Dernier message: 19/09/2005, 16h27
  4. Debutant en JAVA, problème avec 1er programme
    Par Gymerus dans le forum Entrée/Sortie
    Réponses: 13
    Dernier message: 07/09/2005, 12h10
  5. Réponses: 2
    Dernier message: 16/08/2005, 09h21

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