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

Langage Java Discussion :

une erreur dans l'exécution d'un programme


Sujet :

Langage Java

  1. #1
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 3
    Points : 1
    Points
    1
    Par défaut une erreur dans l'exécution d'un programme
    Bonjour, je suis étudiante et je dois programmer en java mais il se trouve que je suis face à une erreur que je n'arrive pas à résoudre pourriez-vous m'aider ?
    merci d'avance

    L'erreur est Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 2

    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
    package tp2;
    /**
     *
     * @author 4lepoelv
     */
    public class Gestion {
        public static void main (String[]args){
     
            int n,i,an, p;
            String is, au, ti, isl;
     
            System.out.println("Nombre de Livre à enregistrer ?");
            n = Lire.i();
            Livre t[] = new Livre [n];
     
            // création du tableau de livre
            for(i=0;i<n;i++){
            System.out.println("Enter l'ISBN du livre :\t" + "n°" +i);
            is = Lire.S();
            System.out.println("Quel est l'auteur de ce livre ?\t" + "n°"+i);
            au = Lire.S();
            System.out.println("Quel est le titre de ce livre ? \t" +"n°" +i);
            ti = Lire.S();
            System.out.println("Quelle est l'année d'édition de ce livre ?\t" +"n°"+ i);
            an = Lire.i();
     
     
            t[i] = new Livre(is,au,ti,an);
     
            }     
     
            // ajout d'un nouveau livre
            int m,ann;
            String isn,aun,tin;
            m = n+1;
            Livre g[] = new Livre [m];
            for(i=0;i<m-1;i++){
                g[i] = t[i];
            }
            System.out.println("Enter l'ISBN du nouveau livre :");
            isn = Lire.S();
            System.out.println("Quel est l'auteur de ce nouveau livre ?");
            aun = Lire.S();
            System.out.println("Quel est le titre de ce nouveau livre ? ");
            tin = Lire.S();
            System.out.println("Quelle est l'année d'édition de ce nouveau livre ?");
            ann = Lire.i();
     
            g[n+1] = new Livre(isn,aun,tin,ann);

  2. #2
    Membre chevronné Avatar de guigui5931
    Profil pro
    Chef de projet NTIC
    Inscrit en
    Avril 2006
    Messages
    1 667
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2006
    Messages : 1 667
    Points : 2 232
    Points
    2 232
    Par défaut
    Cela signifie que tu essaye d'accéder à une case d'un tableau qui n'existe pas. Je pense que c'est sur cette ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    g[n+1] = new Livre(isn,aun,tin,ann);
    puisque tu créé le tableau comme ça
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    m = n+1;
    Livre g[] = new Livre [m];
    donc g va de 0 à n il n'y a pas de case n+1.

  3. #3
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 3
    Points : 1
    Points
    1
    Par défaut création d'une nouvelle case
    j'avais aussi repéré ce problème. Mais je ne sais pas comment crée ce nouveau tableau g en lui attribuant une case de plus que l'autre pour ensuite remplir cette case. Si je dispose de ce tableau de taille m si je veux accèder à la dernière case je dois mettre m-1 ?
    merci pour ta réponse.

  4. #4
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 3
    Points : 1
    Points
    1
    Par défaut modification
    Le problème était bien celui la je vous remerci. J'ai continué mon programme mais j'ai de nouveau une erreur. Pouvez-vous m'aider ?
    Je n'arrive pas bien à saisir comment fonctionne un compareto.

    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
    // modification des données d'un livre
            System.out.println("Enter l'ISBN du livre à* modifier :");
            String ism;
            ism = Lire.S();
            int c,p,rep;
            p=0;
            c=1;
            while(c!=0){
                c = g[p].ISBN.compareTo(ism);
                p = p+1;     
            }
            System.out.println("Changer d'auteur : taper 1"+"\n"+
                    "Changer de titre : taper 2"+ "\n"+
                    "Changer année d'édition : taper 3");
            rep = Lire.i();
            switch (rep){
                case 1 :
                System.out.println("Donner le nouvel auteur : ");
                au = Lire.S();
                g[p-1].auteur = au ;
                break;
                case 2:
                System.out.println("Donner le nouveau titre : ");
                ti = Lire.S();
                g[p-1].titre = ti ; 
                break;
                case 3 :
                System.out.println("Donner la nouvelle année d'édition ");
                an = Lire.i();
                g[p-1].anedition = an ;    
                break;
            }

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    52
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 52
    Points : 63
    Points
    63
    Par défaut
    la fonction compareTo est utilisée le plus souvent pour trier les objets. Dans ton cas la fonction equals est préférable.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    p=0;
    c=1;
    while(c!=0){
    c = g[p].ISBN.compareTo(ism);
    p = p+1;
    }
    Attention à cette boucle while, car si aucun ISBN correspond à l'ism saisie, tu vas sortir du tableau (ArrayIndexOutOfBoundsException).

    Si tu code en java 1.5 ou >, il semblerais plus facile de faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    for(Livre livre : g) {
        if(l.ISBN.equals(ism) {
            ...
            break;
        }
    }
    Si je peux me permettre, le code est un peu brouillon, il ne faut pas être radin sur le nommage des variables. Exemple Lire.S() <=> Lire.String() ...
    g ne renseigne en rien que c'est un tableau de Livre ...

    Je te conseille de lire attentivement le tutorial de Sun pour découvrir tous les atouts de Java. Plutôt que de redimensionner un tableau, il est préférable d'utiliser une collection de type ArrayList ...
    Une fois le tutorial compris tu pourras attaquer la javadoc des API.

    Bonne chance pour la suite.

Discussions similaires

  1. Explication d une erreur dans mon programme sas
    Par bailliblaire dans le forum SAS Base
    Réponses: 1
    Dernier message: 18/01/2012, 17h16
  2. Réponses: 3
    Dernier message: 26/10/2011, 10h15
  3. Il y a une erreur dans mon programme, mais où ?
    Par BillGates62 dans le forum Débuter avec Java
    Réponses: 3
    Dernier message: 16/05/2011, 22h44
  4. Réponses: 2
    Dernier message: 23/04/2009, 09h28
  5. Erreur dans l'exécution d'une requête
    Par ouinih dans le forum SQL
    Réponses: 3
    Dernier message: 11/06/2008, 23h32

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