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

Collection et Stream Java Discussion :

NullPointerException sur un tableau.


Sujet :

Collection et Stream Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2014
    Messages
    50
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2014
    Messages : 50
    Par défaut NullPointerException sur un tableau.
    Bonsoir,

    Pour un projet en cours, je dois créer un algorithme récursif permettant de résoudre le problème des 8 reines (placer 8 reines sur un échiquier de 8x8 cases sans qu'elles ne se menacent mutuellement).
    Pour cet algorithme je me suis inspiré d'une proposition de solution mise à disposition en langage algorithmique sur un site trouvé.

    Codant en Java je l'ai retranscrit dans ce langage mais j'ai une erreur.

    Voici le code :

    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
     
    public class ProbReines {
        private int nbReines = 8;
        private int[] echiquier;
     
        public ProbReines(){
     
        }
     
        public static void main(String[] args){
            ProbReines test = new ProbReines();
            test.placerReine(1);
        }
     
        public boolean estLibre(int[] unEchiquier,int ligne,int colonne){
            int l, c;
            boolean resultat;
     
            resultat = true;
            l = 1;
     
            while(l <= ligne){
                c = unEchiquier[l];
                resultat = resultat && (Math.abs(ligne-l) != Math.abs(colonne-c)) && (colonne != c);
                l = l + 1;
            }
            return resultat;
        }
     
        public void placerReine(int reine){
            int col;
     
            if(reine > nbReines){
     
            }
            else{
                col = 1;
                while(col <= nbReines){
                    if(estLibre(echiquier,reine,col)){
                        echiquier[reine] = col;
                        placerReine(reine + 1);
                        echiquier[reine] = 0;
                    }
                    col = col +1;
                }
            }
        }
    }

    Et voici l'erreur :

    Exception in thread "main" java.lang.NullPointerException
    at projet.ProbReines.estLibre(ProbReines.java:25)
    at projet.ProbReines.placerReine(ProbReines.java:41)
    at projet.ProbReines.main(ProbReines.java:14)
    Java Result: 1

    Sur l'algo de départ j'ai cette donnée :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    S[1,n] : tableau d'entiers;
    Ce que j'ai retranscrit par :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    private int[] echiquier;
    Parce qu'honnêtement, je ne suis plus très opérationnel en Java et j'ai toujours eu un souci avec les tableaux..

    Merci d'avance,
    Bonne soirée !

  2. #2
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    Pour l'initialiser
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    private int[] echiquier = new int[taille];
    sinon, il est null.

  3. #3
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2014
    Messages
    50
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2014
    Messages : 50
    Par défaut
    Merci pour ta réponse.

    En effet, j'avais vu qu'il fallait mettre une taille et j'avais essayé mais une autre erreur était apparue donc j'ai décidé de remettre le code de départ pour ce sujet.

    M'enfin, après avoir mis la taille à 8, j'ai ceci comme erreur :

    Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 8
    at projet.ProbReines.estLibre(ProbReines.java:25)
    at projet.ProbReines.placerReine(ProbReines.java:41)
    at projet.ProbReines.placerReine(ProbReines.java:43)
    at projet.ProbReines.placerReine(ProbReines.java:43)
    at projet.ProbReines.placerReine(ProbReines.java:43)
    at projet.ProbReines.placerReine(ProbReines.java:43)
    at projet.ProbReines.placerReine(ProbReines.java:43)
    at projet.ProbReines.placerReine(ProbReines.java:43)
    at projet.ProbReines.placerReine(ProbReines.java:43)
    at projet.ProbReines.main(ProbReines.java:14)
    Java Result: 1
    D'après ce que j'ai vu sur le net, cela veut dire que je passe au-delà de la capacité du tableau ? Mais je ne comprends pas à quel moment.

  4. #4
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    ben au moment où tu accède à l'index 8, donc au 9ème élément, d'un tableau qui n'a que 8 places...

  5. #5
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2014
    Messages
    50
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2014
    Messages : 50
    Par défaut
    Ouais mais si on regarde le nombre d'erreurs affichées, il y en a 8 sur placerReine donc c'est qu'il n'y a que 8 traitements ?

  6. #6
    Rédacteur/Modérateur
    Avatar de andry.aime
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    8 391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Ile Maurice

    Informations forums :
    Inscription : Septembre 2007
    Messages : 8 391
    Par défaut
    Bonjour,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    col = 1;
                while(col <= nbReines)
    L'index d'un tableau commence par 0 en java et non pas à 1.

Discussions similaires

  1. NullPointerException sur un tableau de String
    Par floctc dans le forum Collection et Stream
    Réponses: 14
    Dernier message: 20/04/2010, 09h03
  2. [Tableau] NullPointerException sur les tableaux
    Par zsoh dans le forum Collection et Stream
    Réponses: 6
    Dernier message: 18/01/2010, 17h42
  3. Réponses: 2
    Dernier message: 08/04/2004, 16h30
  4. Comment faire un Drag&Drop sur un tableau
    Par Stef.web dans le forum Composants VCL
    Réponses: 6
    Dernier message: 11/10/2003, 13h12
  5. [VBA-E] Dim dynamique sur un tableau
    Par Vince69 dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 12/12/2002, 13h32

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